ब्राउज़र के BACK बटन (ब्राउज़रों के पार) को कैसे निष्क्रिय करें?
ब्राउज़र के BACK बटन (ब्राउज़रों के पार) को कैसे निष्क्रिय करें?
जवाबों:
यह प्रश्न इस एक के समान है ...
आपको इस कार्य के लिए कैश को समाप्त करने के लिए बाध्य करने की आवश्यकता है। निम्नलिखित कोड को अपने पेज कोड के पीछे रखें।
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
अपेक्षित ब्राउज़र व्यवहार को अक्षम न करें।
अपने पृष्ठों को एक या दो पृष्ठ वापस करने वाले उपयोगकर्ताओं की संभावना को संभालें; उनके सॉफ़्टवेयर को अपंग करने का प्रयास न करें।
मैं एक छोटी सी हैक के साथ आया था जो जावास्क्रिप्ट का उपयोग करके बैक बटन को निष्क्रिय करता है। मैंने इसे क्रोम 10, फ़ायरफ़ॉक्स 3.6 और IE9 पर चेक किया:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<title>Untitled Page</title>
<script type = "text/javascript" >
function changeHashOnLoad() {
window.location.href += "#";
setTimeout("changeHashAgain()", "50");
}
function changeHashAgain() {
window.location.href += "1";
}
var storedHash = window.location.hash;
window.setInterval(function () {
if (window.location.hash != storedHash) {
window.location.hash = storedHash;
}
}, 50);
</script>
</head>
<body onload="changeHashOnLoad(); ">
Try to hit the back button!
</body>
</html>
यह क्या कर रहा हैं?
टिप्पणियाँ से:
यह स्क्रिप्ट इस तथ्य का लाभ उठाती है कि ब्राउजर इतिहास के हिस्से के रूप में ब्राउज़र में "#" चिह्न के बाद जो भी आता है, उस पर विचार करता है। यह क्या करता है: जब पृष्ठ लोड होता है, तो URL में "# 1" जोड़ा जाता है। 50ms के बाद "1" हटा दिया जाता है। जब उपयोगकर्ता "बैक" पर क्लिक करता है, तो ब्राउज़र यूआरएल को वापस उसी चीज़ में बदल देता है जो "1" हटाए जाने से पहले था, लेकिन - यह वही वेब पेज है, इसलिए ब्राउज़र को पेज को फिर से लोड करने की आवश्यकता नहीं है। - योसी शशो
दूसरों ने "यह मत करो" कहने के लिए दृष्टिकोण लिया है लेकिन यह वास्तव में पोस्टर के सवाल का जवाब नहीं देता है। चलो बस मान लेते हैं कि हर कोई जानता है कि यह एक बुरा विचार है, लेकिन हम उत्सुक हैं कि यह कैसे किया जाता है ...
आप उपयोगकर्ता के ब्राउज़र पर बैक बटन को अक्षम नहीं कर सकते हैं, लेकिन आप इसे बना सकते हैं ताकि आपका एप्लिकेशन टूट जाए (उपयोगकर्ता को शुरू करने के लिए एक त्रुटि संदेश प्रदर्शित होता है, जिसके लिए उपयोगकर्ता की आवश्यकता होती है)।
ऐसा करने के लिए मैंने जो एक तरीका देखा है, वह है आवेदन के भीतर हर URL पर एक टोकन पास करना और हर रूप में। टोकन को प्रत्येक पृष्ठ पर पुनर्जीवित किया जाता है, और उपयोगकर्ता द्वारा एक नया पृष्ठ लोड करने के बाद पिछले पृष्ठों के किसी भी टोकन को अमान्य कर दिया जाता है।
जब उपयोगकर्ता किसी पृष्ठ को लोड करता है, तो पृष्ठ केवल तभी दिखाएगा यदि सही टोकन (जो पिछले पृष्ठ पर सभी लिंक / प्रपत्रों को दिया गया था) को इसे पारित कर दिया गया था।
मेरे बैंक द्वारा प्रदान की जाने वाली ऑनलाइन बैंकिंग एप्लीकेशन इस प्रकार है। यदि आप बैक बटन का उपयोग करते हैं, तो कोई और लिंक काम नहीं करेगा और अधिक पेज पुनः लोड नहीं किया जा सकता है - इसके बजाय आप एक नोटिस देखते हैं जो आपको बताता है कि आप वापस नहीं जा सकते हैं, और आपको शुरू करना होगा।
जबकि मैं स्वयं उत्तर की तलाश कर रहा हूं, "सर्वश्रेष्ठ अभ्यास" .... पुराना है ... जैसे ब्राउज़र हैं (वास्तव में ब्राउज़र बदसूरत हैं)
ब्राउज़रों के लिए सबसे अच्छा / सबसे सुरक्षित समाधान एक विधि / अनुरोध को लागू करना होगा जहां उपयोगकर्ता पृष्ठ को इंटरफ़ेस को नियंत्रित करने की क्षमता प्रदान कर सकता है।
क्यों? क्योंकि मेरे वर्तमान प्रोजेक्ट के लिए मैं 100% जावास्क्रिप्ट निर्मित और नियंत्रित इंटरफ़ेस का निर्माण कर रहा हूं .. और बैक बटन की मेरी परियोजना में कोई जगह नहीं है क्योंकि कोई पृष्ठ परिवर्तन नहीं हुआ है। (यानी एक ताज़ा होने के कारण तेज़ तेज़ और कोई पृष्ठ-चमक नहीं .. बिल्कुल असली एप्लीकेशन की तरह!)
मुझे पता है कि इंटरफ़ेस को "हाईजैक" करने की क्षमता क्यों नहीं है, और मैं इसे समझता हूं। लेकिन कम से कम हमारे पास इसे ब्राउज़र से अनुरोध करने की क्षमता होनी चाहिए! अब यह वास्तव में हाईजैक खतरों के बिना "सर्वोत्तम अभ्यास" होगा।
लेकिन ब्राउज़रों के ब्राउज़र .. मुझे इस संबंध में कुछ भी बाहर निकलने की उम्मीद नहीं है।
मैं उसी प्रश्न को खोज रहा था और मुझे एक साइट पर निम्नलिखित कोड मिला। यहाँ साझा करने के लिए सोचा:
function noBack()
{
window.history.forward()
}
noBack();
window.onload = noBack;
window.onpageshow = function(evt){ if(evt.persisted) noBack(); }
window.onunload = function(){ void(0); }
हालांकि, जैसा कि उपर्युक्त उपयोगकर्ताओं द्वारा कहा गया है, यह कभी भी एक अच्छा अभ्यास नहीं है और इसे सभी कारणों से बचा जाना चाहिए।
यदि आप क्लाइंट-साइड तकनीक पर भरोसा करते हैं, तो इसे दरकिनार किया जा सकता है। उदाहरण के लिए, जावास्क्रिप्ट अक्षम किया जा सकता है। या उपयोगकर्ता आपके प्रतिबंधों के आसपास काम करने के लिए JS स्क्रिप्ट निष्पादित कर सकता है।
मेरा अनुमान है कि आप केवल उपयोगकर्ता सत्र के सर्वर-साइड ट्रैकिंग, और पुनर्निर्देशन (जैसा कि Server.Transfer, नहीं Response.Redirect) उपयोगकर्ता / ब्राउज़र को आवश्यक पृष्ठ पर कर सकते हैं।
कुछ अलग कार्यान्वयन हुए हैं। IE के लिए एक फ्लैश समाधान और कुछ iframe / फ्रेम समाधान है। इसकी जांच करो
BTW: अक्षम करने के लिए बहुत सारे वैध कारण हैं (या कम से कम 1 कदम रोकें) एक बैक बटन - जीमेल को एक उदाहरण के रूप में देखें जो उपरोक्त लेख में चर्चा किए गए हैश समाधान को लागू करता है।
Google "ajax ने बैक बटन कैसे तोड़ा" और आपको उपयोगकर्ता परीक्षण और बैक बटन को अक्षम करने की वैधता पर बहुत सारे लेख मिलेंगे।
मुझे भी यही समस्या थी, इस जावा स्क्रिप्ट फ़ंक्शन को हेड टैग पर या इसके 100% ठीक काम पर उपयोग करें, आपको वापस नहीं जाने देंगे।
<script type = "text/javascript" >
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
</script>
इस कोड को आज़माएं। मेरे लिए काम किया। यह मूल रूप से पृष्ठ लोड होते ही हैश को बदल देता है जो URL पर "1" जोड़कर हाल के इतिहास पृष्ठ को बदल देता है। इसलिए जब आप बैक बटन दबाते हैं, तो यह हर बार उसी पेज पर रीडायरेक्ट होता है।
<script type="text/javascript">
var storedHash = window.location.hash;
function changeHashOnLoad() { window.location.hash = "1";}
window.onhashchange = function () {
window.location.hash = storedHash;
}
</script>
<body onload="changeHashOnLoad(); ">
</bod>
आपको उचित समाप्ति और कैशिंग हेडर वाले पोस्ट का उपयोग करना चाहिए।
ब्राउज़र बैक बटन को अक्षम करने के बजाय इसका समर्थन करना बेहतर है। .NET 3.5 बहुत अच्छी तरह से ब्राउज़र को वापस (और आगे) बटन को संभाल सकता है। Google के साथ खोजें: "Scriptmanager EnableHistory"। आप यह नियंत्रित कर सकते हैं कि कौन सी उपयोगकर्ता क्रियाएँ ब्राउज़र के इतिहास में प्रविष्टि जोड़ेगी (ScriptManager -> AddHistoryPoint) और आपके ASP.NET एप्लिकेशन को एक घटना मिलती है जब भी उपयोगकर्ता ब्राउज़र पर क्लिक करता है / फॉरवर्ड बटन। यह सभी ज्ञात ब्राउज़रों के लिए काम करेगा
विश्व स्तर पर, बैक बटन को अक्षम करना वास्तव में बुरा अभ्यास है। लेकिन, कुछ स्थितियों में, बैक बटन की कार्यक्षमता समझ में नहीं आती है।
पृष्ठों के बीच अवांछित नेविगेशन को रोकने का एक तरीका यहां है:
शीर्ष पृष्ठ (फ़ाइल top.php):
<?php
session_start();
$_SESSION[pid]++;
echo "top page $_SESSION[pid]";
echo "<BR><a href='secondary.php?pid=$_SESSION[pid]'>secondary page</a>";
?>
द्वितीयक पृष्ठ (फ़ाइल secondary.php):
<?php
session_start();
if ($_SESSION[pid] != $_GET[pid])
header("location: top.php");
else {
echo "secondary page $_SESSION[pid]";
echo "<BR><a href='top.php'>top</a>";
}
?>
इसका प्रभाव अपने स्वयं के लिंक का उपयोग करके शीर्ष पृष्ठ से आगे माध्यमिक पृष्ठ और पीछे (जैसे रद्द करना) पर नेविगेट करने की अनुमति है। लेकिन, शीर्ष पृष्ठ पर लौटने के बाद ब्राउज़र बैक बटन को द्वितीयक पृष्ठ पर नेविगेट करने से रोका जाता है।
यहां तक कि मैंने पहले भी ऐसी ही स्थिति का सामना किया ... और कोई मदद नहीं की। इन चीजों को आजमाएं शायद ये आपके काम आएंगे
लॉगिन पृष्ठ <head>टैग में:
<script type="text/javascript">
window.history.forward();
</script>
लॉगआउट बटन में मैंने ऐसा किया:
protected void Btn_Logout_Click(object sender, EventArgs e)
{
connObj.Close();
Session.Abandon();
Session.RemoveAll();
Session.Clear();
HttpContext.Current.Session.Abandon();
}
और लॉगिन पृष्ठ पर मैंने उपयोगकर्ता नाम पाठ बॉक्स पर इस तरह ध्यान केंद्रित किया है:
protected void Page_Load(object sender, EventArgs e)
{
_txtUsername.Focus();
}
उम्मीद है कि यह मदद करता है ... :) किसी ने मुझे इस पृष्ठ को संपादित करने के लिए कैसे सिखा ...
यदि आपको अपने वेब ऐप में डिलीट और बैकस्पेस कीज़ को धीरे से दबाने की आवश्यकता है, ताकि जब वे आइटम एडिट / डिलीट कर रहे हों तो पेज अप्रत्याशित रूप से पुनर्निर्देशित न हो, तो आप इस कोड का उपयोग कर सकते हैं:
window.addEventListener('keydown', function(e) {
var key = e.keyCode || e.which;
if (key == 8 /*BACKSPACE*/ || key == 46/*DELETE*/) {
var len=window.location.href.length;
if(window.location.href[len-1]!='#') window.location.href += "#";
}
},false);
इस कोड को आज़माएं। आपको बस इस कोड को मास्टर पेज पर लागू करने की आवश्यकता है और यह आपके लिए सभी पृष्ठों पर काम करेगा
<script type="text/javascript">
window.onload = function () {
noBack();
}
function noBack() {
window.history.forward();
}
</script>
<body onpageshow="if (event.persisted) noBack();">
</body>
योसी शशो के कोड के साथ समस्या यह है कि पेज हर 50 एमएस में शीर्ष पर स्क्रॉल कर रहा है। इसलिए मैंने उस कोड को संशोधित कर दिया है। अब सभी आधुनिक ब्राउज़रों, IE8 और इसके बाद के संस्करण पर इसका काम ठीक है
var storedHash = window.location.hash;
function changeHashOnLoad() {
window.location.href += "#";
setTimeout("changeHashAgain()", "50");
}
function changeHashAgain() {
window.location.href += "1";
}
function restoreHash() {
if (window.location.hash != storedHash) {
window.location.hash = storedHash;
}
}
if (window.addEventListener) {
window.addEventListener("hashchange", function () {
restoreHash();
}, false);
}
else if (window.attachEvent) {
window.attachEvent("onhashchange", function () {
restoreHash();
});
}
$(window).load(function () { changeHashOnLoad(); });