2009-11-30 9 views
114

में उपयोग करना मैं वर्तमान पृष्ठ के यूआरएल में हैश के बाद मान प्राप्त करना चाहता हूं और फिर इसे एक नए फ़ंक्शन में लागू करने में सक्षम हूं ... उदाहरण के लिए।यूआरएल हैश स्थान प्राप्त करना, और इसे jQuery

यूआरएल

www.example.com/index.html#foo 

हो सकता है और मैं कोड

$('ul#foo:first').show(); 

मैं थोड़े संभालने कर रहा हूँ/उम्मीद का निम्न भाग के साथ संयोजन के रूप में इस का उपयोग करना चाहते हैं वहाँ हथियाने का कोई रास्ता है यह, और इसे एक चर में बदल रहा है जिसे मैं कोड के दूसरे भाग में उपयोग कर सकता हूं।

किसी भी मदद की व्यापक सराहना की जाएगी!

चीयर्स

+8

मेरे पास आपके लिए कोई कोड नहीं है, लेकिन आपको इनपुट को स्वच्छ करना सुनिश्चित करना चाहिए, क्योंकि यह कोड इंजेक्शन के लिए परिपक्व लगता है। –

उत्तर

245

संपादक की टिप्पणी : नीचे दृष्टिकोण गंभीर सुरक्षा निहितार्थ और, आप उपयोग कर रहे jQuery के संस्करण पर निर्भर करता है, हमलों XSS करने के लिए अपने उपयोगकर्ताओं को बेनकाब कर सकते हैं है। अधिक जानकारी के लिए, इस उत्तर या this explanation on Security Stack Exchange पर टिप्पणियों में संभावित हमले की चर्चा देखें।

var hash = window.location.hash; 
$('ul'+hash+':first').show(); 

ध्यान दें कि यह संपत्ति पहले से ही शुरुआत में # प्रतीक शामिल हैं:

आप वर्तमान पृष्ठ का हैश हड़पने के लिए location.hash संपत्ति का उपयोग कर सकते हैं।

वास्तव में आप, जब से तुम ID selector उपयोग कर रहे हैं :first छद्म चयनकर्ता की जरूरत नहीं माना जाता है कि आईडी डोम भीतर अद्वितीय हैं है।

मामले में आप एक URL स्ट्रिंग से हैश प्राप्त करना चाहते हैं, तो आप String.substring विधि का उपयोग कर सकते हैं:

var url = "http://example.com/file.htm#foo"; 
var hash = url.substring(url.indexOf('#')); // '#foo' 

सलाह: ध्यान रखें कि उपयोगकर्ता हैश को बदल सकते हैं के रूप में वह चाहता है रहो, अपने चयनकर्ता को कुछ भी इंजेक्शन देना, आपको इसे इस्तेमाल करने से पहले हैश की जांच करनी चाहिए।

+26

ध्यान दें कि jQuery चयनकर्ताओं का उपयोग कस्टम जावास्क्रिप्ट कोड निष्पादित करने के लिए किया जा सकता है, इसलिए असंतुलित हैश का उपयोग करना बेहद असुरक्षित है। चयनकर्ताओं के लिए हाल के jQuery संस्करणों में इसके लिए आधा assed फिक्स है जिसमें इंजेक्शन कोड से पहले # है, लेकिन यदि आप location.hash की शुरुआत से # चिह्न हटाते हैं तो भी आपको जोखिम है। ई जी 'var हैश = location.hash.slice (1); $ ('ul.item' + हैश) .show()। संलग्न करें ($ ('# content')); 'यह हैश में डाले गए एक स्क्रिप्ट टैग को निष्पादित करेगा। '$ ('Body') का उपयोग करने के लिए यह एक अच्छी आदत है।' $ ('Ul' + हैश + ': पहले') के बजाय '' ul '+ हैश +': पहला ') ढूंढें। – Tgr

+37

कुछ ब्रोश हैश प्रतीक लौटते हैं, और कुछ नहीं करते हैं, इसलिए इसका उपयोग करना सुरक्षित है: 'var हैश = location.hash.replace (' # ',' ');' – Tim

+0

@Tgr जब आप कहते हैं कि "unsanitized हैश का उपयोग करना बहुत भयंकर, बेहद असुरक्षित है, "क्या आप समझा सकते हैं कि क्या किया जा सकता है? क्या हम किसी ऐसे उपयोगकर्ता के बारे में बात कर रहे हैं जो अपने कंप्यूटर को हैक कर रहा है? मैं सिर्फ इस बारे में नहीं सोच सकता कि असली भेद्यता क्या है और वास्तव में कुछ विस्तार की सराहना करेगी। – snapfractalpop

29

location.hash आईई (IE9 सहित) के मामले में, आईई लिए सुरक्षित नहीं है, अपने पृष्ठ आइफ्रेम शामिल है, तो iframe सामग्री के अंदर के मैनुअल ताज़ा बाद location.hash मूल्य पहले पृष्ठ लोड के लिए वर्ष (मूल्य मिलता है)। जबकि मैनुअल लिया गया मूल्य location.hash से अलग है इसलिए हमेशा document.URL

के माध्यम से इसे पुनः प्राप्त
var hash = document.URL.substr(document.URL.indexOf('#')+1) 
+5

अद्यतन: document.URL में फ़ायरफ़ॉक्स 3.6 पर हैश मान नहीं है, इसलिए location.href सुरक्षित var हैश = location.href.substr (location.href.indexOf ('#') + 1) –

2

जो शुद्ध जावास्क्रिप्ट समाधान

document.getElementById(location.hash.substring(1)).style.display = 'block' 

आशा इस आप कुछ समय की बचत होती है के लिए देख रहे हैं उन लोगों के लिए।

संबंधित मुद्दे