কীভাবে ব্রাউজারের ব্যাক বোতামটি (ব্রাউজার জুড়ে) অক্ষম করবেন?
কীভাবে ব্রাউজারের ব্যাক বোতামটি (ব্রাউজার জুড়ে) অক্ষম করবেন?
উত্তর:
এই প্রশ্নের খুব এই অনুরূপ এক ...
এটি কাজ করার জন্য আপনাকে ক্যাশে জোর করতে হবে। পিছনে আপনার পৃষ্ঠা কোডে নীচের কোডটি রাখুন।
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
প্রত্যাশিত ব্রাউজার আচরণটি অক্ষম করবেন না।
আপনার পৃষ্ঠাগুলি ব্যবহারকারীরা দু'এক পৃষ্ঠা বা দু'বার ফিরে যাওয়ার সম্ভাবনাটি পরিচালনা করে; তাদের সফ্টওয়্যার পঙ্গু করার চেষ্টা করবেন না।
আমি সামান্য হ্যাক নিয়ে এসেছি যা জাভাস্ক্রিপ্ট ব্যবহার করে পিছনের বোতামটি অক্ষম করে। আমি এটি ক্রোম 10, ফায়ারফক্স 3.6 এবং আই 9 তে পরীক্ষা করেছি:
<!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>
এটা কি করছে?
মন্তব্য থেকে:
এই স্ক্রিপ্টটি এই সত্যটি উপস্থাপন করে যে ব্রাউজারগুলি ব্রাউজিং ইতিহাসের অংশ হিসাবে ইউআরএলে "#" সাইন করার পরে যা কিছু আসে তা বিবেচনা করে। এটি যা করে তা হ'ল: পৃষ্ঠাটি লোড হয়ে গেলে, "# 1" ইউআরএলে যুক্ত করা হয়। 50 মিটার পরে "1" সরানো হয়। যখন ব্যবহারকারী "পিছনে" ক্লিক করেন, ব্রাউজারটি "1" অপসারণের পূর্বে যা ছিল তা URL পরিবর্তন করে, তবে এটি একই ওয়েব পৃষ্ঠা, তাই ব্রাউজারটি পৃষ্ঠাটি পুনরায় লোড করার প্রয়োজন হয় না। - ইয়োসি শাশো
অন্যরা "এটি করবেন না" বলার দৃষ্টিভঙ্গি নিয়েছে তবে এটি পোস্টারের প্রশ্নের সত্যই উত্তর দেয় না। আসুন কেবল ধরে নেওয়া যাক যে সবাই জানেন যে এটি একটি খারাপ ধারণা, তবে এটি কীভাবে হয় তা সম্পর্কে আমরা আগ্রহী ...
আপনি কোনও ব্যবহারকারীর ব্রাউজারে পিছনের বোতামটি অক্ষম করতে পারবেন না, তবে আপনি এটি তৈরি করতে পারেন যাতে আপনার অ্যাপ্লিকেশনটি ব্রেক হয়ে যায় (ব্যবহারকারী একটি ত্রুটি বার্তা প্রদর্শন করে, ব্যবহারকারীকে আরম্ভ করার প্রয়োজন হয়) যদি ব্যবহারকারী ফিরে যায়।
এটি করার জন্য আমি যে পদ্ধতিটি দেখেছি তা হ'ল অ্যাপ্লিকেশনটির মধ্যে এবং প্রতিটি ফর্মের মধ্যে প্রতিটি URL- এর একটি টোকন পাস করা। টোকেনটি প্রতিটি পৃষ্ঠায় পুনরায় জেনারেট হয় এবং ব্যবহারকারী একবার নতুন পৃষ্ঠা লোড করলে পূর্ববর্তী পৃষ্ঠাগুলির কোনও টোকেন অবৈধ হয়।
যখন ব্যবহারকারী কোনও পৃষ্ঠা লোড করেন, পৃষ্ঠাটি কেবলমাত্র তখনই প্রদর্শিত হবে যদি সঠিক টোকেন (যা পূর্ববর্তী পৃষ্ঠায় সমস্ত লিঙ্ক / ফর্মগুলিতে দেওয়া হয়েছিল) এতে পাস করা হয়েছিল।
আমার ব্যাংক যে অনলাইন ব্যাংকিং অ্যাপ্লিকেশন সরবরাহ করে তা হ'ল এটি। আপনি যদি মোটামুটি পিছনের বোতামটি ব্যবহার করেন তবে আর কোনও লিঙ্ক কাজ করবে না এবং কোনও পৃষ্ঠা পুনরায় লোড করা যাবে না - পরিবর্তে আপনি একটি নোটিশ দেখতে পেয়েছেন যে আপনি ফিরে যেতে পারবেন না এবং আপনাকে আবার শুরু করতে হবে।
আমি নিজেই উত্তরটির সন্ধান করার সময়, "সেরা অনুশীলন" হ'ল .... পুরানো ... ঠিক যেমন ব্রাউজারগুলি হয় ((সত্যিই ব্রাউজারগুলি কুৎসিত জীবাশ্মগুলি হয়)
সর্বোত্তম / নিরাপদ সমাধান হ'ল ব্রাউজারগুলির এমন একটি পদ্ধতি / অনুরোধ কার্যকর করা যেখানে ব্যবহারকারী পৃষ্ঠাটিকে ইন্টারফেস নিয়ন্ত্রণের ক্ষমতা দিতে পারে।
কেন? কারণ আমার বর্তমান প্রকল্পের জন্য আমি একটি 100% জাভাস্ক্রিপ্ট নির্মিত এবং নিয়ন্ত্রিত ইন্টারফেস তৈরি করছি .. এবং পৃষ্ঠার পরিবর্তন নেই বলে আমার প্রকল্পে পিছনে বোতামটির কোনও স্থান নেই। (যেমন রক্তাক্ত দ্রুত এবং একটি পৃষ্ঠার ঝলকানো একটি রিফ্রেশের কারণে .. ঠিক বাস্তব প্রয়োগের মতো!)
ইন্টারফেসটি কেন "হাইজ্যাক" করার ক্ষমতা নেই তা আমি জানি এবং আমি এটি বুঝতে পারি। তবে কমপক্ষে আমাদের ব্রাউজার থেকে এটি অনুরোধ করার ক্ষমতা থাকা উচিত! হাইজ্যাকের ঝুঁকিগুলি ছাড়াই এখন সত্যিই এটি "সেরা অনুশীলন" হবে।
তবে ব্রাউজারগুলি ব্রাউজার হচ্ছে .. আমি আশা করি না যে এই প্রসঙ্গে বাইরে থেকে বেরিয়ে আসা কিছু হবে anything
আমি একই প্রশ্নের সন্ধান করছি এবং আমি একটি সাইটে নিম্নলিখিত কোড পেয়েছি। এটিকে এখানে ভাগ করে নেওয়ার কথা ভেবেছিলেন:
function noBack()
{
window.history.forward()
}
noBack();
window.onload = noBack;
window.onpageshow = function(evt){ if(evt.persisted) noBack(); }
window.onunload = function(){ void(0); }
তবে উপরোক্ত ব্যবহারকারীদের দ্বারা উল্লিখিত হিসাবে, এটি কখনও ভাল অনুশীলন নয় এবং সমস্ত কারণে এড়ানো উচিত।
আপনি যদি ক্লায়েন্ট-সাইড প্রযুক্তির উপর নির্ভর করেন তবে এটি পরিবেষ্টিত হতে পারে। উদাহরণস্বরূপ জাভাস্ক্রিপ্ট অক্ষম করা যেতে পারে। অথবা ব্যবহারকারী আপনার বিধিনিষেধকে ঘিরে কাজ করতে কোনও জেএস স্ক্রিপ্ট কার্যকর করতে পারে।
আমার অনুমান যে আপনি কেবল এটির ব্যবহারকারীর সেশনের সার্ভার-সাইড ট্র্যাকিং এবং প্রয়োজনীয় পৃষ্ঠাতে ব্যবহারকারী / ব্রাউজারকে (সার্ভার.টান্সফার হিসাবে, প্রতিক্রিয়া নয়। পুনর্নির্দেশ) পুনঃনির্দেশ দ্বারা এটি করতে পারেন।
কয়েকটি আলাদা বাস্তবায়ন হয়েছে। IE এর জন্য একটি ফ্ল্যাশ সমাধান এবং কিছু iframe / ফ্রেম সমাধান রয়েছে। এটা পরীক্ষা করো
বিটিডাব্লু: পিছনের বোতামটি নিষ্ক্রিয় করার (বা কমপক্ষে 1 টি পদক্ষেপ রোধ করার) জন্য প্রচুর বৈধ কারণ রয়েছে - উপরের নিবন্ধে আলোচিত হ্যাশ সমাধানটি কার্যকর করে এমন একটি উদাহরণ জিমেইলে দেখুন।
গুগল "কীভাবে এজ্যাক্স ব্যাক বোতামটি ভেঙে দিয়েছে" এবং আপনি ব্যবহারকারীর পরীক্ষার উপর প্রচুর নিবন্ধ এবং পিছনের বোতামটি অক্ষম করার বৈধতা পাবেন।
আমারও একই সমস্যা ছিল, এই জাভা স্ক্রিপ্ট ফাংশনটি হেড ট্যাগে ব্যবহার করুন বা এটির 100% কাজ ঠিক আছে, আপনাকে আর ফিরে যেতে দেবে না।
<script type = "text/javascript" >
function preventBack(){window.history.forward();}
setTimeout("preventBack()", 0);
window.onunload=function(){null};
</script>
এই কোড ব্যবহার করে দেখুন। আমার জন্য কাজ করেছেন। এটি মূলত পৃষ্ঠাটি লোড হওয়ার সাথে সাথেই হ্যাশটিকে পরিবর্তন করে যা URL এ "1" যোগ করে সাম্প্রতিক ইতিহাস পৃষ্ঠা পরিবর্তন করে changes সুতরাং আপনি যখন পিছনে বোতামটি চাপবেন তখন এটি প্রতিটি সময় একই পৃষ্ঠায় পুনঃনির্দেশ করে।
<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 ব্রাউজারটিকে ফিরে (এবং ফরোয়ার্ড) বোতামগুলি খুব ভালভাবে পরিচালনা করতে পারে। গুগলের সাথে অনুসন্ধান করুন: "স্ক্রিপ্টম্যানার সক্ষমযোগ্য ইতিহাস"। কোন ব্যবহারকারী পদক্ষেপগুলি ব্রাউজারের ইতিহাসে (স্ক্রিপ্টম্যানেজার -> অ্যাড হিস্টোরিপয়েন্ট) কোনও এন্ট্রি যুক্ত করবে তা আপনি নিয়ন্ত্রণ করতে পারেন এবং যখনই ব্যবহারকারী ব্রাউজারের পিছনে / ফরোয়ার্ড বোতামগুলিতে ক্লিক করে আপনার এএসপি.এনইটি অ্যাপ্লিকেশন একটি ইভেন্ট পেয়ে থাকে। এটি সমস্ত পরিচিত ব্রাউজারগুলির জন্য কাজ করবে
বিশ্বব্যাপী, পিছনের বোতামটি অক্ষম করা সত্যিই খারাপ অভ্যাস। তবে, কিছু পরিস্থিতিতে, পিছনের বোতামের কার্যকারিতাটি বোঝায় না।
পৃষ্ঠাগুলির মধ্যে অযাচিত নেভিগেশন রোধ করার জন্য এখানে একটি উপায়:
শীর্ষ পৃষ্ঠা (ফাইল 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>
Yossi Shasho এর কোড নিয়ে সমস্যা হ'ল পৃষ্ঠাটি প্রতি 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(); });