दिलचस्प पोस्ट
क्या PHP और ASP.Net IIS 7.5 में एक ही वेब साइट में एक साथ चल सकता है? यदि 'और' सी में एक 'scanf' कथन में नहीं डाल दिया जाता है तो क्या होगा? जावा.टिल.डेट का समय क्षेत्र कैसे सेट करें? ऑपरेटर == को सामान्य प्रकार के सी # में लागू नहीं किया जा सकता है? दिए गए संदर्भ में परिणाम सेट नहीं लौटा सकते कैसे एंड्रॉइड में SQLite डेटाबेस से डेटा को पुनः प्राप्त करें और इसे TextView में प्रदर्शित करें बाइट डेटाग्रिड कॉलम दृश्यता MVVM विशिष्ट मूल्यों को वापस करने के लिए ऑरेकल में सूची बनाएं मौजूदा ईसी 2 उदाहरण के लिए कुंजीपेयर जोड़ें एपीआई <21 के लिए ड्राइंग टंकना लक्ष्य: पहले और: के बाद छद्म तत्वों के साथ jQuery एक HTTP प्रतिक्रिया शीर्षक में सामग्री-स्वभाव का उपयोग PHP से SSL के साथ दूरस्थ MySQL सर्वर से कनेक्ट करें मानचित्रण करते समय मूल्य परिवर्तित करें यूनिक्स सिस्टम पर सी ++ में सरल ग्लोब?

मेरे AJAX आवेदन में वापस बटन पर कॉल को रोकना: मैं यह कुछ नहीं करना चाहता हूँ!

मेरे पास एक AJAX ऐप है एक उपयोगकर्ता एक बटन पर क्लिक करता है, और पृष्ठ के प्रदर्शन में परिवर्तन करता है। वे मूल स्थिति पर जाने की उम्मीद में वापस बटन पर क्लिक करते हैं, लेकिन इसके बजाय, वे अपने ब्राउज़र में पिछले पृष्ठ पर जाते हैं।

मैं बैक बटन इवेंट को कैसे रोक और पुन: असाइन कर सकता हूं? मैंने आरएसएच जैसे पुस्तकालयों में देखा है (जो मैं काम नहीं कर सका …), और मैंने सुना है कि हैश टैग का उपयोग करने में किसी तरह मदद मिलती है, लेकिन मैं इसे समझ नहीं पा रहा हूं।

धन्यवाद!

Solutions Collecting From Web of "मेरे AJAX आवेदन में वापस बटन पर कॉल को रोकना: मैं यह कुछ नहीं करना चाहता हूँ!"

आह, वापस बटन आप कल्पना कर सकते हैं कि "वापस" एक जावास्क्रिप्ट घटना को आग लगाता है जिसे आप बस इस तरह रद्द कर सकते हैं:

document.onHistoryGo = function() { return false; } 

नहीं तो वहां कोई ऐसी घटना नहीं है

यदि आपके पास वास्तव में कोई वेब ऐप है (जैसा कि कुछ अमेक्सी सुविधाओं के साथ सिर्फ एक वेब साइट का विरोध है) यह उचित है कि आप बैक बटन को ले जाएं (यूआरएल के टुकड़ों के साथ)। जीमेल यह करता है मैं इस बारे में बात कर रहा हूं कि जब एक पृष्ठ में सभी में आपका वेब ऐप होता है, तो सभी स्वयं निहित होता है

यह तकनीक सरल है – जब भी उपयोगकर्ता चीजों को संशोधित करने वाली कार्रवाई करता है, तो उसी URL पर रीडायरेक्ट करें जो आप पहले से ही हैं, लेकिन एक भिन्न हैश टुकड़ा के साथ। उदाहरण के लिए

 window.location.hash = "#deleted_something"; ... window.location.hash = "#did_something_else"; 

यदि आपके वेब ऐप की समग्र स्थिति में हैश करने योग्य है, तो यह एक हैश का उपयोग करने के लिए एक शानदार स्थान है। कहते हैं कि आपके पास ईमेल की एक सूची है, हो सकता है कि आप अपने सभी आईडी को जोड़कर और पढ़ने / अपठित स्थिति को देख लें, और अपने टुकड़ा पहचानकर्ता के रूप में इसका उपयोग करके एक MD5 हैश लें।

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

अब हालांकि कठिन हिस्सा, जब उपयोगकर्ता को वापस हिट करने पर आपका जावास्क्रिप्ट पता लगाया जाता है (ताकि आप राज्य को वापस कर सकें)। आप सब करते हैं खिड़की के स्थान को देखते हैं और देखते हैं कि यह कब बदलता है। मतदान के साथ (मुझे पता है, युक, मतदान। ठीक है, अभी कुछ भी बेहतर क्रॉस-ब्राउज़र नहीं है)। आप यह नहीं बता पाएंगे कि क्या वे आगे या पीछे जाते हैं, तो आपको अपने हैश पहचानकर्ताओं के साथ रचनात्मक बनाना होगा। (शायद एक हैश एक अनुक्रम संख्या के साथ समाहित …)

यह कोड का सार है (यह भी है कि कैसे jQuery के इतिहास प्लगइन काम करता है।)

 var hash = window.location.hash; setInterval(function(){ if (window.location.hash != hash) { hash = window.location.hash; alert("User went back or forward to application state represented by " + hash); } }, 100); 

एक पुराने (लेकिन लोकप्रिय) प्रश्न का उत्तर देने के लिए:

एचटीएमएल 5 ने history.pushState() और history.replaceState() विधियों की शुरुआत की है, जो आपको क्रमशः इतिहास प्रविष्टियों को जोड़ने और संशोधित करने की अनुमति देता है। ये विधियां window.onpopstate के साथ संयोजन के रूप में काम करती हैं।

history.pushState() का उपयोग करना history.pushState() उस संदर्भ में परिवर्तन करता है जो आपके द्वारा राज्य को बदलने के बाद बनाए गए XMLHttpRequest वस्तुओं के लिए HTTP शीर्षलेख में उपयोग किया जाता है। रेफरर उस दस्तावेज़ का यूआरएल होगा, जिसकी विंडो XMLHttpRequest ऑब्जेक्ट के निर्माण के समय है।

स्रोत: मोज़िला डेवलपर नेटवर्क से ब्राउज़र इतिहास को नियंत्रित करना

JQuery का उपयोग करके मैंने एक सरल समाधान बनाया है:

 $(window).bind('hashchange', function() { top.location = '#main'; // Eventually alert the user describing what happened }); 

अब तक केवल Google क्रोम में ही परीक्षण किया गया है।

इसने मेरे वेब ऐप के लिए समस्या का समाधान किया जो कि बहुत ही AJAX- आधारित है।

यह शायद थोड़ा हैक है- लेकिन मैं इसे खूबसूरत हैकिंग कहूंगा 😉 जब भी आप पिछली बार नेविगेट करने की कोशिश करते हैं तो यह यूआरआई में एक हैश का हिस्सा पॉप करता है जो कि तकनीकी रूप से पीछे की ओर नेविगेट करने की कोशिश करता है।

यह दोनों ब्राउज़र बटन और माउस बटन पर क्लिक करने से रोकता है। और आप इसे दूसरी तरफ कई बार क्लिक करके या तो पीछे की तरफ नहीं कर सकते, जो कि एक समस्या है जो सेट-टाइमआउट या सेट इन्टरवल पर आधारित समाधान में होती है।

मैं गहराई के उत्तर में दिए गए स्पष्टीकरण की सराहना करता हूं, लेकिन मुझे लगता है कि इसे " हैश परिवर्तनीय " घटना का उपयोग करके सुधार किया जा सकता है काले रंग की व्याख्या के अनुसार, आप यह सुनिश्चित करना चाहते हैं कि आपके सभी बटन विंडो को बदलते हैं। Location.hash मूल्य।

  • एक तरह से <button> तत्वों का उपयोग करना है, और फिर उनको घटनाओं को संलग्न करना है जो तब window.location.hash = "#!somehashstring"; सेट करें window.location.hash = "#!somehashstring";
  • ऐसा करने का एक और तरीका है कि बस अपने बटन के लिए लिंक का उपयोग करें, जैसे <a href="#!somehashstring">Button 1</a> । जब ये लिंक क्लिक किए जाते हैं तो हैश स्वचालित रूप से अपडेट हो जाता है

हैश संकेत के बाद मेरे पास एक विस्मयादिबोधक चिह्न है, जो Google के "हैशबैंग" प्रतिमान ( उस बारे में और पढ़ें ) को संतुष्ट करना है, जो उपयोगी है यदि आप खोज इंजन द्वारा अनुक्रमित करना चाहते हैं। आपके हैशस्ट्रिंग सामान्यतया नाम / मूल्य जोड़े जैसे #!color=blue&shape=triangle या #!/blue/triangle जैसी सूची होगी – जो भी आपके वेब ऐप के लिए समझ में आता है

तब आपको केवल इस बिट कोड को जोड़ने की आवश्यकता है जो कि जब भी हैश मान में बदलाव आएगा (जिसमें वापस बटन दबाया गया होगा )। कोई मतदान लूप आवश्यक नहीं लगता है

 window.addEventListener("hashchange", function(){ console.log("Hash changed to", window.location.hash); // .... Do your thing here... }); 

मैंने क्रोम 36 में कुछ भी नहीं परीक्षण किया है, लेकिन caniuse.com के अनुसार , यह IE8 +, FF21 +, Chrome21 + और ओपेरा मिनी के अलावा अन्य अधिकांश ब्राउज़रों में उपलब्ध होना चाहिए।

यह ब्राउज़र बैक बटन को बहुत आसान है, जैसे नीचे दिए गए JQuery कोड की तरह:

 // History API if( window.history && window.history.pushState ){ history.pushState( "nohb", null, "" ); $(window).on( "popstate", function(event){ if( !event.originalEvent.state ){ history.pushState( "nohb", null, "" ); return; } }); } 

आप इसे काम कर रहे हैं और यहाँ अधिक उदाहरण dotnsf देख सकते हैं और यहां thecssninja

धन्यवाद !

गोपनीयता संबंधी चिंताओं के कारण, वापस बटन को अक्षम करना या उपयोगकर्ता के इतिहास की जांच करना असंभव है, लेकिन पेजों को बदलने के बिना इस इतिहास में नई प्रविष्टियां बनाना संभव है। जब भी आपका AJAX आवेदन स्थिति बदलता है, एक नया यूआरआई टुकड़ा के साथ top.location अद्यतन करें।

 top.location = "#new-application-state"; 

इससे ब्राउज़र के इतिहास स्टैक में एक नई प्रविष्टि बन जाएगी। कई AJAX पुस्तकालय पहले से ही सभी उबाऊ विवरणों को संभालते हैं, जैसे कि वास्तव में सरल इतिहास

मेरी स्थिति में, मैं बैक बटन को उपयोगकर्ता को अंतिम पेज पर भेजने और इसके बजाय, एक अलग कार्रवाई करने से रोकना चाहता था। hashchange घटना का उपयोग करना मैं एक समाधान के साथ आया हूं जो मेरे लिए काम करता है यह स्क्रिप्ट मानती है कि जिस पृष्ठ पर आप इसे उपयोग कर रहे हैं वह पहले से ही हैश का उपयोग नहीं करता है, जैसा कि मेरे मामले में है:

 var hashChangedCount = -2; $(window).on("hashchange", function () { hashChangedCount++; if (top.location.hash == "#main" && hashChangedCount > 0) { console.log("Ah ah ah! You didn't say the magic word!"); } top.location.hash = '#main'; }); top.location.hash = "#"; 

दूसरी अन्य उत्तरों के साथ मेरे पास समस्या यह है कि hashchange आयोजन नहीं होगा। आपकी स्थिति के आधार पर, यह आपके लिए भी काम कर सकता है

मैं ऐसा कुछ करता हूं मैं पिछले एप्लिकेशन राज्यों के साथ एक सरणी रखता हूँ

के रूप में शुरू:

 var backstack = []; 

तब मैं स्थान हैश में हुए बदलावों के लिए सुनता हूं, और जब यह बदलता है मैं ऐसा करता हूं:

 if (backstack.length > 1 && backstack[backstack.length - 2] == newHash) { // Back button was probably pressed backstack.pop(); } else backstack.push(newHash); 

इस तरह मेरे पास उपयोगकर्ता इतिहास का ट्रैक रखने का कुछ आसान तरीका है अब अगर मैं ऐप में बैक बटन को लागू करना चाहता हूं (ब्राउज़र-बॉट नहीं), तो मैं इसे करता हूं:

 window.location.hash = backstack.pop(); 

मैंने सामान्य इतिहास व्यवहार को ओवरराइड करने और HTML5 इतिहास एपीआई (यह IE 9 में काम नहीं करेगा) का उपयोग करते हुए विशिष्ट back और forward बटन ईवेंट बनाने का एक तरीका तैयार किया है। यह बहुत हैकी है, लेकिन प्रभावी यदि आप पीछे और आगे बटन की घटनाओं को अवरुद्ध करना चाहते हैं और उन्हें चाहते हैं कि आप उन्हें संभालना चाहते हैं। यह कई परिदृश्यों में उपयोगी हो सकता है, उदाहरण के लिए यदि आप दूरस्थ डेस्कटॉप विंडो को प्रदर्शित कर रहे थे और रिमोट मशीन पर वापस और आगे बटन क्लिक पुन: उत्पन्न करने के लिए आवश्यक थे।

निम्नलिखित पीठ और आगे बटन व्यवहार ओवरराइड होगा:

 var myHistoryOverride = new HistoryButtonOverride(function() { console.log("Back Button Pressed"); return true; }, function() { console.log("Forward Button Pressed"); return true; }); 

अगर आप उन कॉलबैक फ़ंक्शंस में से किसी में गलत तरीके से लौट आए हैं, तो आप ब्राउज़र को सामान्य बैक / फॉरवर्ड ऑपरेशन के साथ आगे बढ़ने की इजाजत दे देंगे और अपना पेज छोड़ दें।

यहां पूरी स्क्रिप्ट की आवश्यकता है:

 function HistoryButtonOverride(BackButtonPressed, ForwardButtonPressed) { var Reset = function () { if (history.state == null) return; if (history.state.customHistoryStage == 1) history.forward(); else if (history.state.customHistoryStage == 3) history.back(); } var BuildURLWithHash = function () { // The URLs of our 3 history states must have hash strings in them so that back and forward events never cause a page reload. return location.origin + location.pathname + location.search + (location.hash && location.hash.length > 1 ? location.hash : "#"); } if (history.state == null) { // This is the first page load. Inject new history states to help identify back/forward button presses. var initialHistoryLength = history.length; history.replaceState({ customHistoryStage: 1, initialHistoryLength: initialHistoryLength }, "", BuildURLWithHash()); history.pushState({ customHistoryStage: 2, initialHistoryLength: initialHistoryLength }, "", BuildURLWithHash()); history.pushState({ customHistoryStage: 3, initialHistoryLength: initialHistoryLength }, "", BuildURLWithHash()); history.back(); } else if (history.state.customHistoryStage == 1) history.forward(); else if (history.state.customHistoryStage == 3) history.back(); $(window).bind("popstate", function () { // Called when history navigation occurs. if (history.state == null) return; if (history.state.customHistoryStage == 1) { if (typeof BackButtonPressed == "function" && BackButtonPressed()) { Reset(); return; } if (history.state.initialHistoryLength > 1) history.back(); // There is back-history to go to. else history.forward(); // No back-history to go to, so undo the back operation. } else if (history.state.customHistoryStage == 3) { if (typeof ForwardButtonPressed == "function" && ForwardButtonPressed()) { Reset(); return; } if (history.length > history.state.initialHistoryLength + 2) history.forward(); // There is forward-history to go to. else history.back(); // No forward-history to go to, so undo the forward operation. } }); }; 

यह एक साधारण अवधारणा द्वारा काम करता है जब हमारा पृष्ठ लोड होता है, हम 3 अलग इतिहास राज्यों (1, 2, और 3 गिने) बनाते हैं और ब्राउज़र को राज्य संख्या 2 में नेविगेट करते हैं। क्योंकि राज्य 2 मध्य में है, अगली इतिहास नेविगेशन घटना हमें किसी भी स्थिति में 1 या 3, और इस से हम यह निर्धारित कर सकते हैं कि उपयोगकर्ता किस दिशा में दबाया गया और इसी तरह, हमने एक बैक या आगे बटन ईवेंट को रोक लिया है हम इसे संभालते हैं लेकिन हम चाहते हैं और राज्य नंबर 2 पर वापस लौटें ताकि हम अगले इतिहास नेविगेशन ईवेंट पर कब्जा कर सकें।

जाहिर है, आपको history.replaceState और history.pushState विधियों का उपयोग करते हुए इतिहासबटन ओवरराइड स्क्रिप्ट का उपयोग करने से बचना चाहिए, अन्यथा आप इसे तोड़ देंगे