2013-08-25 9 views
5

मैं पुराने यूआरएल तक पहुंच के साथ "यूआरएल परिवर्तन से पहले" ईवेंट में एक श्रोता जोड़ना चाहता हूं। window.onbeforeunload आग नहीं करता है अगर पृष्ठ पुनः लोड नहीं होता है (AJAX संचालित पृष्ठ)।यूआरएल परिवर्तनों का पता लगाएं (विंडो अनलोड के बिना)

यह YouTube वीडियो पृष्ठों पर होता है, जब आप सही नेविगेशन कॉलम में किसी अन्य वीडियो पर क्लिक करते हैं, उदाहरण के लिए।

मैंने this post पढ़ा है, जो window.location चुनाव करता है। लेकिन यह पुराना यूआरएल कैप्चर नहीं करता है।

यह क्रोम एक्सटेंशन के लिए है। मैं जावास्क्रिप्ट में यूआरएल परिवर्तन से पहले पता लगाने का एक तरीका ढूंढ रहा हूं।

+1

[इतिहास API] (https://developer.mozilla.org/en-US/docs/Web/API/window.history) एक शॉट दें। – Joseph

+0

स्थानीय संग्रहण –

+0

के लिए खोज करने का प्रयास करें आप इतिहास API –

उत्तर

2

यदि आप क्रोम एक्सटेंशन लिख रहे हैं, तो आप onUpdated ईवेंट सुन सकते हैं जिसे टैब यूआरएल बदलते समय निकाल दिया जाता है। अधिक जानकारी https://developer.chrome.com/extensions/tabs.html#event-onUpdated पर।

+0

मुझे अद्यतन पर टैब के बारे में पता है। हालांकि, जब आप यूआरएल अपडेट होते हैं, तो आप केवल पृष्ठभूमि स्क्रिप्ट के साथ ही पता लगा सकते हैं। मैं सामग्री स्क्रिप्ट में पहचानने का एक तरीका ढूंढ रहा हूं, जबकि अभी भी पुराने यूआरएल तक पहुंच है। –

+2

फिर आप अपने प्रश्न में उल्लिखित 'window.location' मतदान के तरीके का उपयोग कर सकते हैं। पुराने यूआरएल तक पहुंच के लिए, इसे वैश्विक चर के रूप में सहेजें, या इसे स्थानीय स्टोरेज में सहेजें। यूट्यूब इतिहास API का उपयोग करता है, इसलिए यह किसी अन्य वीडियो पर नेविगेट करते समय आपकी सामग्री स्क्रिप्ट को पुनः लोड नहीं करेगा। –

+1

आश्चर्यचकित यह करने के लिए एक आसान तरीका नहीं है .. –

4

AJAX- संचालित पृष्ठों के लिए जो history API (उनमें से अधिकतर, YouTube सहित) का उपयोग करते हैं, तो आप history.pushState में विभाजित कर सकते हैं।

क्रोम के लिए, पुराना यूआरएल spf-referer संपत्ति में होगा। (इसके अलावा, location.href अभी भी पुराने यूआरएल के लिए, जबकि pushState, फायरिंग भी कर रहा है स्थापित किया जाएगा।)

तो इस तरह कोड काम करेगा:

var H    = window.history; 
var oldPushState = H.pushState; 
H.pushState   = function (state) { 
    if (typeof H.onpushstate == "function") { 
     H.onpushstate ({state: state}); 
    } 
    return oldPushState.apply (H, arguments); 
} 
window.onpopstate = history.onpushstate = function (evt) { 
    console.log ("Old URL: ", evt.state["spf-referer"]); 
} 

ध्यान दें कि, क्योंकि आप ओवरराइड करने के लिए की जरूरत है लक्ष्य पृष्ठ की pushState फ़ंक्शन, आपको अपनी सामग्री स्क्रिप्ट से यह कोड inject होना चाहिए।

संबंधित मुद्दे