2013-07-22 11 views
7

के साथ नेविगेशन में रद्द करने का पता लगाना अगर मैं जावास्क्रिप्ट (या इससे भी बेहतर, jQuery) का उपयोग कर ब्राउज़र में "स्टॉप नेविगेशन" बटन दबाकर उपयोगकर्ता का पता लगाने का कोई तरीका था, तो मैं उत्सुक था। उदाहरण के लिए, यदि आप लोड करने में कुछ समय लगने वाले वेबपृष्ठ के लिए एक लिंक पर क्लिक करें, आप एक कताई लोडर दिखाना चाह सकते हैं। लेकिन क्या होगा यदि उपयोगकर्ता पृष्ठ पर नेविगेशन रद्द कर देता है? क्या आपके पास डालने वाले कताई लोडर से छुटकारा पाने के लिए वैसे भी है?जावास्क्रिप्ट या jQuery

संपादित: मैं थोड़ा और अधिक शोध किया है, और वहाँ जावास्क्रिप्ट में एक onStop घटना होने के लिए लेकिन, आप यह पता नहीं होता है, यह केवल इंटरनेट एक्सप्लोरर में काम करता है लगता है। यदि किसी के पास ऑनस्टॉप जैसे क्रॉस ब्राउज़र समाधान को लागू करने के लिए कोई अन्य विचार है, तो यह अद्भुत होगा, लेकिन यदि नहीं, तो मैं इसे बंद करने के लिए कुछ दिनों में अपने स्वयं के प्रश्न का उत्तर दूंगा।

EDIT 2: https://stackoverflow.com/a/16216193 कहता है कि यह संभव नहीं है। कुछ अन्य उत्तरों के रूप में।

+2

मुझे नहीं लगता कि एक विश्वसनीय तरीका होगा क्योंकि आपके जेएस पृष्ठ पर भी लोड होने से पहले STOP हो सकता है। –

उत्तर

1

ठीक है, जैसा कि वादा किया गया है, मैं अपने स्वयं के प्रश्न का उत्तर देने जा रहा हूं।

मैंने इस बारे में बहुत कुछ सोचा है - और मैं एक समाधान के साथ आया हूं। मैं इसे कोड में काम करने में सक्षम नहीं था (मैंने बहुत मेहनत नहीं की थी), लेकिन इसे सिद्धांत में काम करना चाहिए।

तो मैंने यह तय करने के मानदंडों के बारे में सोचा कि जब किसी वेबपृष्ठ को स्टॉप का निर्णय लेना चाहिए था। मैं इसके साथ आया:

  • यदि उचित समय के बाद स्क्रिप्ट की मृत्यु नहीं हुई है, तो यह माना जा सकता है कि नेविगेशन रद्द कर दिया गया है।

फिर एक jQuery ईवेंट body या उस तरह कुछ पर निकाल दिया जा सकता है। लेकिन क्या "समय की एक रसीला राशि" का गठन होता है? मुझे लगा कि यह आंशिक रूप से पृष्ठ प्रस्तुत करने के समय (छवियों को लाने, इत्यादि) पर आधारित होगा ताकि यह पता चल सके कि उपयोगकर्ता का इंटरनेट कितना तेज़ है। यही कारण है कि ऐसा करने से मिल जा सकता है:

var start = new Date(); 
var time; 
$("body").load(function() { 
    time = new Date() - start; 
    ... 
}); 

गुणा कि (शायद 3 या कुछ और) एक गुणांक द्वारा और एक approxamate हस्तांतरण समय मिलता है। (सर्वर को अगले पृष्ठ को उत्पन्न करने में कितना समय लगेगा, इस पर निर्भर करता है कि यह कितना गतिशील है।) फिर, इस नए time*3 का उपयोग करके आप इस तरह कुछ लिखेंगे:

$("a").click(function() { //Anything that could go to another page should filter through here 
    setInterval(function() {$(document).trigger("navstopped");},time*3); 
} 
$(document).on("navstopped") { 
    //Do stuff now that we assume navigation stopped. 
} 

मान लें। वास्तव में हम सब यहाँ कर रहे हैं। हमारे पास एक असंगत इंटरनेट कनेक्शन हो सकता है, तेज़ एक मिनट, अगले धीमा हो सकता है। सर्वर लोड भी असंगत हो सकता है। हो सकता है कि यह इस पृष्ठ के लिए निंजा जैसी छवियों की सेवा कर रहा हो, लेकिन यह अगले अनुरोधों के समूह के साथ मारा गया है, जिससे यह अगले पृष्ठ को थोड़ा धीमा कर देगा/सेवा करेगा। तो हम बस यह मान रहे हैं कि कुछ नेविगेशन को कैसे बाधित किया गया है, लेकिन हम निश्चित नहीं हैं

अब, यह आईई के onStop घटना के संयोजन के रूप में उपयोग किया जा सकता है, लेकिन यह वास्तव में एकमात्र क्रॉस ब्राउज़र समाधान था जिसे मैं सोच सकता था। मैं इसे काम करने में सक्षम नहीं था, लेकिन शायद कुछ jQuery देवता भविष्य में सक्षम हो सकता है।

से पहले संपादित करें: इससे पहले कि मैंने इसे पोस्ट किया, मुझे एक और विचार था। अधिक ब्राउज़र onAbort का समर्थन करते हैं।अगर हमारे पास ऐसी तस्वीर है जो कभी लोड नहीं होती है, और उपयोगकर्ता दबाता है, तो onAbort निकाल दिया जाएगा? भले ही कोई अन्य वेबपृष्ठ लोड हो रहा हो? इसे परीक्षण की आवश्यकता है लेकिन यह भी काम कर सकता है। मुझे हालांकि मेरा पहला विचार बेहतर पसंद है। हालांकि अस्थिर, यह इस cockamamie विचार से अधिक स्थिर है और मुझे एहसास है कि यह बुरा अभ्यास हो सकता है।

+1

वाह, यह बहुत अच्छा है। मैं कुछ विचारों के साथ खेलूँगा, हमें अपडेट रखेंगे। –

+0

इस विषय पर कोई अपडेट? – ChrFin

+0

क्या आपने अभी तक अपने विचारों का परीक्षण किया है? –

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