जवाबों:
संक्षिप्त उत्तर: आप नहीं कर सकते।
तकनीकी रूप से एक सटीक तरीका है, जो संपत्ति की जाँच करेगा:
history.previous
हालांकि, यह काम नहीं करेगा। इसके साथ समस्या यह है कि ज्यादातर ब्राउज़रों में इसे सुरक्षा उल्लंघन माना जाता है और आमतौर पर यह अपरिभाषित होता है ।
history.length
एक संपत्ति है जो दूसरों ने सुझाव दिया है ...
हालांकि , लंबाई पूरी तरह से काम नहीं करती है क्योंकि यह इंगित नहीं करता है कि आपके इतिहास में कहां है। इसके अतिरिक्त, यह हमेशा एक ही नंबर पर शुरू नहीं होता है। उदाहरण के लिए, एक लैंडिंग पृष्ठ के लिए सेट नहीं किया गया ब्राउज़र, 0 से शुरू होता है, जबकि दूसरा ब्राउज़र जो लैंडिंग पृष्ठ का उपयोग करता है, वह 1 से शुरू होगा।

ज्यादातर समय एक लिंक जोड़ा जाता है जो कॉल करता है:
history.back();
या
history.go(-1);
और यह उम्मीद की जाती है कि यदि आप वापस नहीं जा सकते हैं तो लिंक पर क्लिक करने से कुछ नहीं होता है।
जाँच करने का एक और तरीका है - रेफरल की जाँच करें। पहले पृष्ठ में आमतौर पर एक खाली रेफ़र होगा ...
if (document.referrer == "") {
window.close()
} else {
history.back()
}
मेरे कोड ने ब्राउज़र को एक पृष्ठ वापस जाने दिया, और यदि वह विफल हो जाता है तो यह एक फॉलबैक url लोड करता है। यह हैशटैग परिवर्तनों का भी पता लगाता है।
जब बैक बटन उपलब्ध नहीं था, तो फॉलबैक यूआरएल 500 एमएस के बाद लोड किया जाएगा, इसलिए ब्राउज़र के पास पिछले पृष्ठ को लोड करने के लिए पर्याप्त समय है। फ़र्कबैक url को सही से लोड करने के बाद window.history.go(-1);ब्राउज़र को फ़ॉलबैक url का उपयोग करने का कारण होगा, क्योंकि js स्क्रिप्ट अभी तक बंद नहीं हुई थी।
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;
});
प्रमुख ब्राउज़रों में काम करने लगता है (परीक्षण FF, क्रोम, IE11 अब तक)।
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, '/');
}
}
FYI करें: ब्राउज़र इतिहास का प्रबंधन करने के लिए मैं History.js का उपयोग करता हूं ।
इतिहास की तुलना क्यों करें। संख्या 2 की गति?
क्योंकि क्रोम का प्रारंभ पृष्ठ ब्राउज़र के इतिहास में पहले आइटम के रूप में गिना जाता है।
history.lengthउपयोगकर्ता के व्यवहार की कुछ संभावनाएँ हैं:
history.length = 2और हम back()इस मामले में अक्षम करना चाहते हैं , क्योंकि उपयोगकर्ता खाली टैब पर जाएगा।history.length = 1और फिर से हम back()विधि को निष्क्रिय करना चाहते हैं ।history.length > 2और अब back()सक्षम किया जा सकता है।नोट: जब उपयोगकर्ता बाहरी वेबसाइट से लिंक पर क्लिक किए बिना चालू पृष्ठ पर उतरता है तो मैं मामला छोड़ देता हूं target="_blank"।
नोट 2: document.referrer खाली है जब आप अपना पता टाइप करके वेबसाइट खोलते हैं और यह भी कि जब वेबसाइट सबजेज को लोड करने के लिए ajax का उपयोग करती है, तो मैंने पहले मामले में इस मान की जांच बंद कर दी।
यह चाल करने के लिए लगता है:
function goBackOrClose() {
window.history.back();
window.close();
//or if you are not interested in closing the window, do something else here
//e.g.
theBrowserCantGoBack();
}
कॉल history.back () और फिर window.close ()। यदि ब्राउज़र इतिहास में वापस जाने में सक्षम है, तो वह अगले कथन तक नहीं पहुंच पाएगा। यदि यह वापस जाने में सक्षम नहीं है, तो यह विंडो बंद कर देगा।
हालाँकि, कृपया ध्यान दें कि यदि पृष्ठ url लिखकर पहुँच गया है, तो फ़ायरफ़ॉक्स अभ्यस्त स्क्रिप्ट को विंडो को बंद करने की अनुमति देता है।
window.close()कई आधुनिक ब्राउज़रों द्वारा एक सुरक्षा जोखिम माना जाता है। कुछ अभ्यस्त तुम यह करते हैं।
इससे सावधान रहें window.history.lengthक्योंकि इसमें प्रविष्टियां भी शामिल हैंwindow.history.forward()
तो हो सकता है कि आपके पास window.history.length1 से अधिक प्रविष्टियाँ हों, लेकिन कोई इतिहास वापस प्रविष्टियाँ न हों। इसका मतलब है कि अगर आप फायर करते हैं तो कुछ नहीं होता हैwindow.history.back()
आप सीधे जाँच नहीं कर सकते हैं कि बैक बटन प्रयोग करने योग्य है या नहीं। आप देख सकते हैं history.length>0, लेकिन यह सही है अगर वर्तमान पृष्ठ के आगे भी पेज हैं। आप केवल यह सुनिश्चित कर सकते हैं कि बैक बटन कब अनुपयोगी हैhistory.length===0 ।
यदि यह पर्याप्त नहीं है, तो आप जो कर सकते हैं उसके बारे में कॉल करें history.back()और, यदि आपका पृष्ठ अभी भी बाद में लोड किया गया है, तो बैक बटन अनुपलब्ध है! बेशक कि साधन करता है, तो वापस बटन है उपलब्ध, तो आप सिर्फ दूर पेज से नेविगेट किया हो। आपको नेविगेशन को रद्द करने की अनुमति नहीं है onunload, इसलिए सभी के बारे में आप वास्तव में हो रही पीठ को रोकने के लिए कर सकते हैंonbeforeunload , जिसमें , जिसके परिणामस्वरूप एक बड़ा कष्टप्रद संकेत दिखाई देगा। यह इसके लायक नहीं है।
वास्तव में यह सामान्य रूप से इतिहास के साथ कुछ भी करने के लिए एक बहुत बुरा विचार है। इतिहास नेविगेशन ब्राउज़र क्रोम के लिए है, न कि वेब पेज। "गो बैक" लिंक को जोड़ना आमतौर पर अधिक उपयोगकर्ता भ्रम का कारण बनता है जो इसके लायक है।
1! 0एक brainfart था, मैंने सोचा था कि ब्राउज़रों हमेशा के साथ जवाब होगा 1या अधिक। ओपेरा और IE सोचता है कि अन्यथा अच्छी पकड़ है।
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);
मैं निम्नलिखित दृष्टिकोण के साथ आया था। यह पता लगाने के लिए onbeforeunload घटना का उपयोग करता है कि ब्राउज़र पृष्ठ को छोड़ना शुरू करता है या नहीं। यदि यह एक निश्चित समय में नहीं होता है तो यह केवल कमबैक पर पुनर्निर्देशित होगा।
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; });इसलिए यह window.onbeforeunload को अधिलेखित नहीं करता है।
यहां और यहां उत्तर पर निर्माण । मुझे लगता है, अधिक निर्णायक जवाब सिर्फ यह जांचने के लिए है कि क्या यह एक नया टैब में एक नया पृष्ठ है।
यदि पृष्ठ का इतिहास एक से अधिक है, तो हम पिछले पृष्ठ पर वर्तमान पृष्ठ पर वापस जा सकते हैं। यदि नहीं, तो टैब एक नया खोला गया टैब है और हमें एक नया टैब बनाने की आवश्यकता है।
अलग-अलग, जुड़े हुए उत्तरों के लिए, हम जाँच नहीं कर रहे हैं 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"लेकिन यह क्रोम पर मेरे लिए काम करता है।
ब्राउज़र में पीछे और आगे बटन है। मैं इस प्रश्न का हल निकालता हूं। लेकिन यह ब्राउज़र फ़ॉरवर्ड एक्शन को प्रभावित करेगा और कुछ ब्राउज़रों के साथ बग पैदा करेगा।
यह इस तरह काम करता है: यदि ब्राउज़र एक नया यूआरएल खोलता है, जो कभी नहीं खोला गया है, तो इतिहास।
तो आप हैश की तरह बदल सकते हैं
location.href = '#__transfer__' + new Date().getTime()
कभी नहीं दिखाया गया url प्राप्त करने के लिए, फिर history.length वास्तविक लंबाई प्राप्त करेगी।
var realHistoryLength = history.length - 1
लेकिन, यह हमेशा अच्छी तरह से काम नहीं करता है, और मुझे नहीं पता कि क्यों, विशेष रूप से जब url ऑटो जल्दी से कूदते हैं।
मैं एक समाधान खोजने की कोशिश कर रहा था और यह सबसे अच्छा मैं मिल सकता है (लेकिन महान काम करता है और यह सबसे आसान समाधान है जो मैंने यहां भी पाया है)।
मेरे मामले में, मैं बैक बटन के साथ इतिहास पर वापस जाना चाहता था, लेकिन यदि उपयोगकर्ता द्वारा खोला गया पहला पृष्ठ मेरे ऐप का एक उप-पृष्ठ था, तो यह मुख्य पृष्ठ पर वापस जाएगा।
समाधान था, जैसे ही ऐप लोड होता है, मैंने सिर्फ इतिहास की स्थिति पर एक प्रतिस्थापन किया:
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आपको वर्तमान URI देगा। मसलन https://domain/question/1234/i-have-a-problemदेंगे /question/1234/i-have-a-problem। Window.location के बारे में दस्तावेज़ देखेंअधिक informations के लिए के ।
इसके बाद, कॉल से split()हमें उस URI के सभी टुकड़े मिलेंगे। इसलिए यदि हम अपना पिछला यूआरआई लेते हैं, तो हमारे पास कुछ ऐसा होगा ["", "question", "1234", "i-have-a-problem"]। String.prototype.split () के बारे में दस्तावेज़ देखेंअधिक informations के लिए ।
filter()बैकवर्ड स्लैश द्वारा उत्पन्न खाली स्ट्रिंग को फ़िल्टर करने के लिए यहां कॉल किया जाता है। यह मूल रूप से केवल उस टुकड़े URI को लौटाएगा जिसकी लंबाई 1 (गैर-रिक्त स्ट्रिंग) से अधिक है। तो हमारे पास कुछ ऐसा होता ["question", "1234", "i-have-a-question"]। इस तरह लिखा जा सकता था:
'use strict';
window.location.pathname.split('/').filter(function(fragment) {
return fragment.length > 0;
});
Array.prototype.filter () और अधिक informations के लिए विनाशकारी असाइनमेंट के बारे में प्रलेखन देखें ।
अब, यदि उपयोगकर्ता चालू रहते हुए वापस जाने की कोशिश करता है https://domain/, तो हम if-स्टेटमेंट को ट्रिगर नहीं करेंगे, और इसलिए इस 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>
और कहीं HTML में:
<button value="Button1"> //These buttons have no action
<button value="Button2">
आप क्या कर सकते हैं यह भी शोध करना है कि ब्राउज़र बैक फ़ंक्शन का समर्थन करते हैं (मुझे लगता है कि वे सभी ऐसा करते हैं) और इस पृष्ठ पर मानक जावास्क्रिप्ट ब्राउज़र डिटेक्शन ऑब्जेक्ट का उपयोग किया गया है, और अच्छी तरह से वर्णित है । फिर आपके पास 2 अलग-अलग पृष्ठ हो सकते हैं: "अच्छे ब्राउज़र" के लिए एक बैक बटन के साथ संगत है और एक "खराब ब्राउज़र" के लिए है जो उन्हें अपने ब्राउज़र को अपडेट करने के लिए कहता है।
history.backएक समारोह है। आप जांचना चाहते हैं कि क्या history.length > 0तब अगर वह वापस आ गयाhistory.back()
[]एक नोडलिस्ट पर कोई मतलब नहीं है, और आप एक इवेंट हैंडलर को स्ट्रिंग असाइन नहीं कर सकते हैं।
जाँच करें कि window.history.lengthक्या 0 के बराबर है।