উত্তর:
সংক্ষিপ্ত উত্তর: আপনি পারবেন না।
প্রযুক্তিগতভাবে একটি সঠিক উপায় আছে, যা সম্পত্তিটি পরীক্ষা করবে:
history.previous
তবে এটি কাজ করবে না won't এই সঙ্গে সমস্যা হল অধিকাংশ ব্রাউজার এই একটি নিরাপত্তা লঙ্ঘন বিবেচনা করা হয় এবং সাধারণত ফেরৎ undefined ।
history.length
অন্যদের প্রস্তাবিত এমন একটি সম্পত্তি ...
তবে দৈর্ঘ্যটি পুরোপুরি কাজ করে না কারণ এটি ইতিহাসে আপনি কোথায় আছেন তা নির্দেশ করে না । অতিরিক্তভাবে, এটি সর্বদা একই সংখ্যায় শুরু হয় না। একটি ব্রাউজারের অবতরণ পৃষ্ঠার জন্য সেট না করা আছে, উদাহরণস্বরূপ, 0 থেকে শুরু হয় যখন অন্য একটি ব্রাউজার যা ল্যান্ডিং পৃষ্ঠা ব্যবহার করে এটি 1 থেকে শুরু হবে।

বেশিরভাগ সময় একটি লিঙ্ক যুক্ত হয় যা কল করে:
history.back();
অথবা
history.go(-1);
এবং এটি কেবল প্রত্যাশা করা হয়েছে যে আপনি যদি ফিরে যেতে না পারেন তবে লিঙ্কটি ক্লিক করা কিছুই করে না।
চেক করার আরও একটি উপায় রয়েছে - রেফারারটি পরীক্ষা করুন। প্রথম পৃষ্ঠায় সাধারণত একটি খালি রেফারার থাকবে ...
if (document.referrer == "") {
window.close()
} else {
history.back()
}
আমার কোডটি ব্রাউজারটিকে একটি পৃষ্ঠায় ফিরে যেতে দেয় এবং যদি এটি ব্যর্থ হয় তবে এটি একটি ফ্যালব্যাক url লোড করে। এটি হ্যাশট্যাগের পরিবর্তনগুলিও সনাক্ত করে।
যখন পিছনের বোতামটি উপলভ্য ছিল না, তখন ফলব্যাক url 500 এমএসের পরে লোড হবে, সুতরাং ব্রাউজারটিতে পূর্ববর্তী পৃষ্ঠাটি লোড করার জন্য পর্যাপ্ত সময় রয়েছে। ঠিক পরে ফ্যালব্যাক ইউআরএল লোড করার window.history.go(-1);ফলে ব্রাউজারটি ফ্যালব্যাক ইউআরএল ব্যবহার করবে, কারণ জেএস স্ক্রিপ্টটি এখনও থামেনি।
function historyBackWFallback(fallbackUrl) {
fallbackUrl = fallbackUrl || '/';
var prevPage = window.location.href;
window.history.go(-1);
setTimeout(function(){
if (window.location.href == prevPage) {
window.location.href = fallbackUrl;
}
}, 500);
}
chrome://newtabএবং এভাবে আপনি ইতিহাসে ফিরে যেতে পারেন।
এখানে আমি এটি কীভাবে করেছি।
আমি বুলিয়ান সেট করতে 'পূর্ববর্তী লোড' ইভেন্টটি ব্যবহার করেছি । তারপরে আমি 'পূর্বেই লোড' চালিত হয় কিনা তা দেখার জন্য একটি সময়সীমা স্থির করেছিলাম।
var $window = $(window),
$trigger = $('.select_your_link'),
fallback = 'your_fallback_url';
hasHistory = false;
$window.on('beforeunload', function(){
hasHistory = true;
});
$trigger.on('click', function(){
window.history.go(-1);
setTimeout(function(){
if (!hasHistory){
window.location.href = fallback;
}
}, 200);
return false;
});
বড় ব্রাউজারগুলিতে (এ পর্যন্ত পরীক্ষিত এফএফ, ক্রোম, আই 11) কাজ করার জন্য মনে হচ্ছে।
window.location.href = fallbackসঙ্গে window.close()এবং এটি খুব কাজ করে।
আমার প্রকল্পগুলিতে আমি একটি স্নিপেট ব্যবহার করি:
function back(url) {
if (history.length > 2) {
// if history is not empty, go back:
window.History.back();
} else if (url) {
// go to specified fallback url:
window.History.replaceState(null, null, url);
} else {
// go home:
window.History.replaceState(null, null, '/');
}
}
এফওয়াইআই: ব্রাউজারের ইতিহাস পরিচালনা করতে আমি ইতিহাস. js ব্যবহার করি ।
ইতিহাস 2 দৈর্ঘ্যের সাথে দৈর্ঘ্যের তুলনা কেন?
কারণ ক্রোমের শুরু পৃষ্ঠাটি ব্রাউজারের ইতিহাসে প্রথম আইটেম হিসাবে গণ্য করা হয়।
history.lengthব্যবহারকারীর আচরণের কয়েকটি সম্ভাবনা রয়েছে :
history.length = 2এবং আমরা back()এই ক্ষেত্রে অক্ষম করতে চাই , কারণ ব্যবহারকারী খালি ট্যাবে যাবে।history.length = 1এবং আবার আমরা back()পদ্ধতিটি অক্ষম করতে চাই ।history.length > 2এবং এখন back()সক্ষম করা যেতে পারে।নোট: যখন ছাড়া বাহ্যিক ওয়েবসাইট থেকে লিঙ্কে ক্লিক করার পরে বর্তমান পৃষ্ঠাটি ব্যবহারকারী জমি আমি যদি বাদ target="_blank"।
নোট 2: document.referrer আপনি ওয়েবসাইটটি ঠিকানাটি টাইপ করে ওপেন করার সময় এবং ওয়েবসাইট সাবপেজগুলি লোড করতে এজ্যাক্স ব্যবহার করার সময় খালি থাকে, তাই আমি প্রথম ক্ষেত্রে এই মানটি পরীক্ষা করা বন্ধ করে দিয়েছি।
এই কৌশলটি মনে হচ্ছে:
function goBackOrClose() {
window.history.back();
window.close();
//or if you are not interested in closing the window, do something else here
//e.g.
theBrowserCantGoBack();
}
কল করুন ইতিহাস.ব্যাক () এবং তারপরে উইন্ডো.ক্লোজ ()। ব্রাউজারটি যদি ইতিহাসে ফিরে যেতে সক্ষম হয় তবে এটি পরবর্তী বিবৃতিতে যেতে সক্ষম হবে না। যদি এটি পিছনে যেতে সক্ষম না হয় তবে এটি উইন্ডোটি বন্ধ করে দেবে।
তবে দয়া করে মনে রাখবেন যে url টাইপ করে পৃষ্ঠাটি পৌঁছেছে তবে ফায়ারফক্স স্ক্রিপ্টটি উইন্ডোটি বন্ধ করার অনুমতি দেবে না।
window.close()অনেক আধুনিক ব্রাউজার দ্বারা এটি সুরক্ষা ঝুঁকি হিসাবে বিবেচিত। কেউ কেউ আপনাকে এটি করতে দেয় না।
পিছনের বোতামটি ব্যবহারযোগ্য কিনা তা আপনি সরাসরি পরীক্ষা করতে পারবেন না। আপনি তাকান করতে পারেন history.length>0, কিন্তু যদি সেখানে পৃষ্ঠাগুলি আছে যে সত্য রাখা হবে এগিয়ে বর্তমান পৃষ্ঠার হিসাবে ভাল। আপনি কেবল তখনই নিশ্চিত হতে পারেন যে পিছনের বোতামটি কখন ব্যবহারযোগ্য history.length===0।
যদি এটি পর্যাপ্ত পরিমাণে না হয় তবে আপনি যা করতে পারেন তার সব থেকে কল is history.back()এবং যদি আপনার পৃষ্ঠাটি পরেও লোড হয় তবে পিছনের বোতামটি উপলভ্য নয়! অবশ্যই তার মানে যদি ব্যাক বোতাম হয় উপলব্ধ করুন, আপনার শুধু দূরে পাতা থেকে নেভিগেট গেছেন। আপনাকে নেভিগেশনটি বাতিল করতে দেওয়া হচ্ছে না onunload, সুতরাং পিছনে পিছনে থামার জন্য onbeforeunloadযা কিছু করা যায় তা হ'ল কিছু থেকে ফিরে আসা , যার ফলে একটি বড় বিরক্তিকর প্রম্পট উপস্থিত হবে। এটা মূল্য নয়।
প্রকৃতপক্ষে ইতিহাসের সাথে যেকোন কিছু করা অবশ্যই সত্যই খারাপ ধারণা। ইতিহাস নেভিগেশন ব্রাউজার ক্রোমের জন্য, ওয়েব পৃষ্ঠাগুলির জন্য নয়। "ফিরে যান" লিঙ্কগুলি যুক্ত করা সাধারণত ব্যবহারকারীদের পক্ষে উপযুক্তের চেয়ে বেশি বিভ্রান্তির কারণ হয়।
1! 0একটি brainfart ছিল, আমি ভেবেছিলাম ব্রাউজার সবসময় নেবে 1বা তার বেশি। অপেরা এবং আইই শুরু করে অন্যথায় — ভাল ক্যাচ।
history.lengthএটি ব্যবহারহীন যেহেতু এটি ব্যবহারকারী ইতিহাসে ফিরে যেতে পারে কিনা তা দেখায় না। এছাড়াও বিভিন্ন ব্রাউজার প্রাথমিক মান 0 বা 1 ব্যবহার করে - এটি ব্রাউজারের উপর নির্ভর করে।
কার্যক্ষম সমাধানটি $(window).on('beforeunload'ইভেন্টটি ব্যবহার করা , তবে আমি নিশ্চিত নই যে পৃষ্ঠাটি এজ্যাক্সের মাধ্যমে লোড করা হয় এবং উইন্ডোটির ইতিহাস পরিবর্তন করতে পুসস্টেট ব্যবহার করা হলে এটি কাজ করবে।
সুতরাং আমি পরবর্তী সমাধান ব্যবহার করেছি:
var currentUrl = window.location.href;
window.history.back();
setTimeout(function(){
// if location was not changed in 100 ms, then there is no history back
if(currentUrl === window.location.href){
// redirect to site root
window.location.href = '/';
}
}, 100);
আমি নিম্নলিখিত পদ্ধতির সাথে হাজির। ব্রাউজারটি পৃষ্ঠাটি ছেড়ে যেতে শুরু করে কিনা তা সনাক্ত করতে এটি অনব্রনলোড ইভেন্টটি ব্যবহার করে। যদি এটি একটি নির্দিষ্ট সময়সীমার মধ্যে না থাকে তবে এটি কেবল ফলব্যাকে পুনর্নির্দেশ করবে।
var goBack = function goBack(fallback){
var useFallback = true;
window.addEventListener("beforeunload", function(){
useFallback = false;
});
window.history.back();
setTimeout(function(){
if (useFallback){ window.location.href = fallback; }
}, 100);
}
আপনি এই ফাংশনটি কল করে কল করতে পারেন goBack("fallback.example.org")।
windows.onbeforeunloadইভেন্ট শ্রোত্রে পরিবর্তিত হয়েছি window.addEventListener("beforeunload", function (event) { useFallback = false; });যাতে এটি উইন্ডোটি ওভাররাইট না করে।
উত্তর এখানে এবং এখানে বিল্ডিং । আমি মনে করি, আরও চূড়ান্ত উত্তরটি হ'ল এটি কোনও নতুন ট্যাবে কোনও নতুন পৃষ্ঠা কিনা তা যাচাই করা।
পৃষ্ঠার ইতিহাস যদি একের বেশি হয় তবে আমরা বর্তমান পৃষ্ঠার আগের পৃষ্ঠায় ফিরে যেতে পারি। যদি তা না হয় তবে ট্যাবটি একটি নতুন খোলা ট্যাব এবং আমাদের একটি নতুন ট্যাব তৈরি করতে হবে।
পৃথকভাবে, যুক্ত উত্তরগুলির সাথে, আমরা referrerএকটি নতুন ট্যাবে এখনও একটি রেফারার হিসাবে পরীক্ষা করব না ।
if(1 < history.length) {
history.back();
}
else {
window.close();
}
আরও একটি নিখুঁত সমাধান রয়েছে যা অন্য এসও উত্তর থেকে নেওয়া :
if( (1 < history.length) && document.referrer ) {
history.back();
}
else {
// If you can't go back in history, you could perhaps close the window ?
window.close();
}
কেউ রিপোর্ট করেছেন যে এটি ব্যবহার করার সময় এটি কাজ করে না target="_blank"তবে মনে হয় এটি Chrome এ আমার জন্য কাজ করে।
ব্রাউজারের পিছনে এবং ফরোয়ার্ড বোতাম রয়েছে। আমি এই প্রশ্নের একটি সমাধান হাজির। তবে এটি ব্রাউজারের ফরোয়ার্ড ক্রিয়াকে প্রভাবিত করবে এবং কিছু ব্রাউজারের সাথে বাগ তৈরি করবে।
এটি এর মতোই কাজ করে: ব্রাউজার যদি কোনও নতুন ইউআরএল খোলায়, যা কখনই খোলেনি, ইতিহাসের দৈর্ঘ্য বৃদ্ধি পাবে।
যাতে আপনি হ্যাশ মত পরিবর্তন করতে পারেন
location.href = '#__transfer__' + new Date().getTime()
কখনও না দেখানো ইউআরএল পাওয়ার জন্য ইতিহাসের দৈর্ঘ্যটি আসল দৈর্ঘ্য পাবে।
var realHistoryLength = history.length - 1
তবে, এটি সর্বদা ভাল কাজ করে না এবং কেন জানি না, বিশেষত যখন ইউআরএল অটো দ্রুত লাফায়।
আমি একটি সমাধান অনুসন্ধান করার চেষ্টা করছিলাম এবং এটিই আমি পেলাম সেরা (তবে দুর্দান্ত কাজ করে এবং এটি এখানে পাওয়া সর্বাধিক সহজ সমাধান)।
আমার ক্ষেত্রে, আমি পিছনে বোতামটি দিয়ে ইতিহাসে ফিরে যেতে চেয়েছিলাম, তবে ব্যবহারকারীরা প্রথম পৃষ্ঠাগুলি যদি আমার অ্যাপ্লিকেশনটির একটি সাবপেজ হয় তবে এটি মূল পৃষ্ঠায় ফিরে যাবে।
সমাধানটি ছিল, অ্যাপ্লিকেশনটি লোড হওয়ার সাথে সাথে আমি কেবল ইতিহাসের স্থিতিতে একটি প্রতিস্থাপন করেছি:
history.replaceState( {root: true}, '', window.location.pathname + window.location.hash)
এইভাবে, history.state.rootফিরে যাবার আগে আমাকে কেবল চেক করা দরকার । যদি সত্য হয়, আমি পরিবর্তে একটি ইতিহাস তৈরি করব:
if(history.state && history.state.root)
history.replaceState( {root: true}, '', '/')
else
history.back()
'use strict';
function previousPage() {
if (window.location.pathname.split('/').filter(({ length }) => length > 0).length > 0) {
window.history.back();
}
}
window.location.pathnameআপনাকে বর্তমান ইউআরআই দেবে। উদাহরণস্বরূপ https://domain/question/1234/i-have-a-problemদিতে হবে /question/1234/i-have-a-problem। আরও তথ্যের জন্য উইন্ডো.লোকশন সম্পর্কে ডকুমেন্টেশন দেখুন ।
এরপরে, কলটি split()আমাদের সেই ইউআরআইয়ের সমস্ত টুকরো দেবে। সুতরাং আমরা যদি আমাদের আগের ইউআরআই নিই তবে আমাদের মতো কিছু হবে ["", "question", "1234", "i-have-a-problem"]। আরও তথ্যের জন্য স্ট্রিং.প্রোটোটাইপ.স্প্লিট () সম্পর্কে ডকুমেন্টেশন দেখুন ।
filter()পিছনে স্ল্যাশ দ্বারা উত্পন্ন খালি স্ট্রিংটি ফিল্টার করার জন্য কলটি এখানে is এটি মূলত কেবলমাত্র টুকরোটি ইউআরআইকে ফিরিয়ে দেবে যার দৈর্ঘ্য 1 এর চেয়ে বেশি (অ-খালি স্ট্রিং) থাকবে। সুতরাং আমরা কিছু আছে["question", "1234", "i-have-a-question"] । এটি এভাবে লিখতে পারত:
'use strict';
window.location.pathname.split('/').filter(function(fragment) {
return fragment.length > 0;
});
আরও তথ্যের জন্য অ্যারে.প্রোটোটাইপ.ফিল্টার () এবং ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট সম্পর্কে ডকুমেন্টেশন দেখুন ।
এখন, যদি ব্যবহারকারী চালু থাকা অবস্থায় ফিরে যাওয়ার চেষ্টা করে https://domain/, আমরা যদি ইফ-বিবৃতিটি ট্রিগার করব না, এবং window.history.back()পদ্ধতিটি ট্রিগার করব না যাতে ব্যবহারকারী আমাদের ওয়েবসাইটে থাকবে। এই URL টির সমান হবে []যার দৈর্ঘ্য রয়েছে 0এবং 0 > 0এটি মিথ্যা। অতএব, নিঃশব্দে ব্যর্থ। অবশ্যই, আপনি কিছু লগ করতে পারেন বা আপনি চাইলে অন্য ক্রিয়া করতে পারেন।
'use strict';
function previousPage() {
if (window.location.pathname.split('/').filter(({ length }) => length > 0).length > 0) {
window.history.back();
} else {
alert('You cannot go back any further...');
}
}
অবশ্যই, ব্রাউজারটি হিস্ট্রি এপিআই সমর্থন না করলে এই সমাধান কাজ করবে না । এই সমাধানটি ব্যবহার করার আগে ডকুমেন্টেশন সম্পর্কে আরও জানার জন্য এটি পরীক্ষা করুন।
আমি নিশ্চিত না যে এটি কাজ করে এবং এটি সম্পূর্ণরূপে অনির্ধারিত হয়েছে তবে এটি চেষ্টা করুন:
<script type="text/javascript">
function goBack() {
history.back();
}
if (history.length > 0) { //if there is a history...
document.getElementsByTagName('button')[].onclick="goBack()"; //assign function "goBack()" to all buttons onClick
} else {
die();
}
</script>
এবং কোথাও এইচটিএমএল:
<button value="Button1"> //These buttons have no action
<button value="Button2">
আপনি যা করতে পারেন তা হ'ল ব্রাউজারগুলি ব্যাক ফাংশনটি কী সমর্থন করে (আমার মনে হয় তারা সকলেই করেন) এবং এই পৃষ্ঠায় পাওয়া জাভাস্ক্রিপ্ট ব্রাউজার সনাক্তকরণ অবজেক্টটি ব্যবহার করা হয়েছে এবং এটি পুরোপুরি বর্ণনা করা হয়েছে । তারপরে আপনার কাছে দুটি আলাদা পৃষ্ঠা থাকতে পারে: একটি "ভাল ব্রাউজারগুলির জন্য" পিছনের বোতামের সাথে সামঞ্জস্যপূর্ণ এবং একটি "খারাপ ব্রাউজারগুলি" তাদের ব্রাউজার আপডেট করতে যেতে বলছে
history.backএকটি ফাংশন। যদি চেক করতে চান history.length > 0যদি এটা দিয়ে ফিরে যান তাহলেhistory.back()
[]একটি NodeList কোন জ্ঞান করে তোলে, এবং আপনি একটি ইভেন্ট হ্যান্ডলার করার জন্য একটি স্ট্রিং ধার্য করতে পারবেন না।
window.history.length0 এর সমান কিনা তা পরীক্ষা করে দেখুন ।