जिस दुविधा में मैं बात कर रहा हूं वह यह है कि jquery-bbq code में, क्योंकि IE6 और IE7 hashchange
का समर्थन नहीं करते हैं, वे इतिहास स्थिति रखने के लिए पृष्ठों को दो बार लोड करते हैं।क्या दस्तावेज़ में खोलने वाले href को परिभाषित करने का एक मानक तरीका है। ओपन कॉल?
इसका नकारात्मक प्रभाव पड़ता है क्योंकि कोड सर्वर-साइड और क्लाइंट-साइड दोनों पर दो बार चलता है।
if (is_old_ie) {
// Create hidden IFRAME at the end of the body.
iframe = $('<iframe src="javascript:0"/>').hide().appendTo('body')[0].contentWindow;
// Get history by looking at the hidden IFRAME's location.hash.
get_history = function() {
return get_fragment(iframe.document.location.href);
};
// Set a new history item by opening and then closing the IFRAME
// document, *then* setting its location.hash.
set_history = function(hash, history_hash) {
if (hash !== history_hash) {
var doc = iframe.document;
doc.open().close();
doc.location.hash = '#' + hash;
}
};
// Set initial history.
set_history(get_fragment());
}
javascript:0
के एक स्रोत के साथ एक खाली आइफ्रेम बनाई गई है: आइफ्रेम बनाने के लिए इस्तेमाल विधि यह है। document.open
विधि को कॉल किया जाता है, और ऐसा लगता है कि यह .open
के साथ खुलने वाले पृष्ठ के लिए डिफ़ॉल्ट के रूप में मूल विंडो के location.href
को पकड़ता है।
मुझे मूल रूप से कोड को संशोधित करना है ताकि यह दो बार एक ही यूआरएल नहीं खोल सके, इसलिए मैं डिफ़ॉल्ट को ओवरराइड करना चाहता हूं और एक param जैसे if ifame = true निर्दिष्ट करना चाहता हूं।
उदाहरण:
http://example.com/views/step-2?one=two
IE में, पेज के ऊपर लोड हो जाता है और उसके बाद एक iframe में फिर से लोड हो जाता है। सर्वर-साइड कोड दो बार निष्पादित करता है, लेकिन मैं नहीं चाहता कि ऐसा हो।
मैं यूआरआई में &iframe=1
जोड़ना चाहता हूं ताकि iframe
परम निर्दिष्ट किया गया हो तो मैं अपने सर्वर-साइड कोड को चलाने से रोक सकता हूं।
दो सबसे स्पष्ट बातें हैं:
- iframe के स्रोत सेट है, लेकिन यह एक नकारात्मक प्रभाव हो सकता था और मैं बहुत यकीन है कि यह एक कारण के लिए वहाँ हूँ।
document.open.close
का उपयोग करने के बजाय,iframe.location.href
का उपयोग करें और इसे मैन्युअल रूप से href पर सेट करें।
अगर किसी को आईफ्रेम हैकिंग के साथ अनुभव हुआ है, तो मैं कुछ सुझावों की सराहना करता हूं।
संपादित: एक अन्य वैकल्पिक हल मैं iframe/ajax के माध्यम से एक पृष्ठ को लोड किया जाएगा के बारे में सोचा कि iframe से पहले एक सत्र वर सेट document.open
है, जो 'iframeloading' के एक सत्र चर जो 1 के बराबर है बनाता है, और 0 करने के लिए इसे वापस सेट करने के लिए iframe लोड पर एक लोड ईवेंट हैंडलर निर्धारित करते हैं, और सत्र वर के लिए 1. कुछ की तरह सेट है, तो मेरी सर्वर-साइड कोड को समायोजित निष्पादित नहीं करने के लिए:
$('<iframe src="/iframe-loading.php"/>').hide().appendTo('body');
document.open().close()
$(document.defaultView).load(function() {
$('<iframe src="iframe-doneloading.php/>').hide().appendTo('body');
});
यदि मैं आपको हैशचेंज ईवेंट को संभालने का एक वैकल्पिक तरीका देता हूं तो jquery it colud आपकी समस्याओं को हल करता है? – ygaradon
यदि आप हैशचेंज लोडिंग को दो बार समस्या को ठीक कर सकते हैं, तो यह आपको बहुत समय बचाएगा। JQuery बीबीक्यू प्रलेखन का उल्लेख है: "दस्तावेज़ पर पहले से ही" हैशचेंज "ईवेंट से जुड़ना सुनिश्चित करें, पहले से नहीं, या अन्यथा यह आईई 6/7 में विफल हो सकता है।" यह तुम्हारी समस्या नहीं है, है ना? साथ ही, आप अपनी समस्या प्रोजेक्ट गिटहब पेज पर https://github.com/cowboy/jquery-bbq/issues पर पोस्ट कर सकते हैं –