2011-08-07 18 views
7

मुझे सफारी में काम करने के लिए window.location.hash = location.hash नहीं मिल सकता है।"window.location.hash = location.hash" वेबकिट (सफारी और क्रोम) में काम नहीं करता

मैं अपने वेबपृष्ठ में नेविगेशन बार के नीचे एक स्क्रोल करने योग्य डीवी के साथ अपने पृष्ठ की सामग्री को लपेटने के लिए जावास्क्रिप्ट का उपयोग कर रहा हूं। चूंकि जावास्क्रिप्ट चलाते समय स्क्रॉलबार का स्थान रीसेट हो जाता है, इसलिए मैं मूल हैश स्थान खो रहा हूं जो यूआरएल सेट है। मुझे हैश स्थान के बिना जावास्क्रिप्ट का उपयोग करके पृष्ठ को पुनः लोड करने की आवश्यकता है, इसलिए मैं window.location.hash = location.hash का उपयोग कर रहा हूं। यह आईई 8, फ़ायरफ़ॉक्स और ओपेरा में काम करता है, लेकिन यह सफारी में काम नहीं करता है। (मैं क्रोम भी मानूंगा, लेकिन मैंने जांच नहीं की है)। कोई सुझाव?

संकेत: मुझे jQuery पसंद है।

+0

परिभाषित करें "काम नहीं करता", कृपया। –

+1

@ टोमालक जहां तक ​​मैं कह सकता हूं, कोड की वह पंक्ति सफारी में कभी निष्पादित नहीं होती है। (1) रैपर जावास्क्रिप्ट निष्पादित करता है, पृष्ठ के शीर्ष पर स्क्रॉलबार स्थान को रीसेट कर रहा है। (2) एक चेतावनी प्रकट होती है, मुझे बताती है कि 'विंडो ... हैश' फ़ंक्शन पृष्ठ पर चलने वाली अगली चीज़ है ... और यही वह है। कुछ और नहीं (प्रासंगिक) होता है। –

उत्तर

11

वेबकिट दो विषमताएं कि रोकने है सामान्य रूप से काम करने से window.location.hash = location.hash

  1. वेबकिट window.location.href बजाय window.location.hash का जवाब (जैसे सभी अन्य ब्राउज़रों करते हैं)। मजे की बात है, webkit अभी भी यूआरएल hash एक प्रलेखित बग जहां href location दो बार एक ही स्थान पर स्थापित किया जाना से पहले ब्राउज़र को नए स्थान पर जाना होगा है का उपयोग कर location.hash
  2. वेबकिट है टैग पढ़ सकते हैं। बग रिपोर्ट here

इस कोड ने मेरी समस्या हल की: (jQuery का उपयोग करके)।

$(document).ready(function() { 
    gotoHASH() 
}; 

function gotoHASH() { 
    if (location.hash) { 
     if ($.browser.webkit == false) { 
      window.location.hash = location.hash; 
     } else { 
      window.location.href = location.hash; 
     } 
    } 
}; 
0

पहले किसी और चीज़ पर location.hash सेट करें और तुरंत इसे वापस सेट करें।

var t = window.location.hash; 
window.location.hash = "non-existant-id"; 
window.location.hash = t; 
+0

कोई सिगार नहीं। आपके कोड ने केवल यूआरएल हैश टैग को संशोधित किया है। यह पृष्ठ कभी नहीं ले जाया गया। –

0

से पहले जावास्क्रिप्ट मूल हैश स्थान परिवर्तित होने पर,

var st = $(window).scrollTop(). 

का उपयोग कर आप स्क्रॉल स्थान पुनर्स्थापित करना चाहते हैं जब स्क्रॉल स्थान प्राप्त का उपयोग

$(window).scrollTop(st); 
+0

'var st = $ (window) .scrollTop()' सफारी में चर सेट भी नहीं करता है। जब मैं '$ (विंडो) चलाता हूं .scrollTop (सेंट) ', कंसोल मुझे एक परिवर्तनीय अपरिभाषित त्रुटि देता है। (हालांकि कोड अन्य ब्राउज़रों में काम करता है।) –

4

मैं

window.location.hash = ""; 
window.location.hash = "myanchor"; 

साथ समाप्त हो गया यह सब डेस्कटॉप ब्राउज़र मैं में और iOS और Android क्रोम पर परीक्षण में ठीक काम किया।

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