2011-01-10 17 views
13

मैं फेसबुक को ट्विक करने के लिए क्रोम एक्सटेंशन विकसित कर रहा हूं। हालांकि, फेसबुक जैसी HTML5-सक्षम साइटों के भीतर ब्राउज़िंग कार्रवाइयों को पकड़ने के लिए window.history.pushState के ओवरराइड की आवश्यकता है जैसा कि in this SO question समझाया गया है।क्रोम एक्सटेंशन से निगरानी इतिहास.pushstate

दुर्भाग्य से, ऐसा लगता है कि क्रोम की अलग दुनिया इस तरह के ओवरराइड को रोकती है। क्या इतिहास परिवर्तनों को पकड़ने की कोई अन्य विधि है (मतदान के अलावा)?

उत्तर

4

हाँ,

एक तरह से एक स्क्रिप्ट टैग बना सकते हैं और वहाँ अपने कोड डाल करने के लिए है:

html = "window.history.pushState = function(a,b,c) { alert('Change !'); };"; 

var headID = document.getElementsByTagName("head")[0];   
var newScript = document.createElement('script'); 
newScript.type = 'text/javascript'; 
newScript.innerHTML = html; 
headID.appendChild(newScript); 
+0

क्या होगा यदि आप पुशस्टेट कमांड को रोकना चाहते हैं, तो कुछ करें, और फिर पुशस्टेट कमांड को सामान्य के रूप में पूरा करने दें, ऊपर दिया गया उदाहरण पुशस्टेट जुर्माना को रोकता है, लेकिन यह वास्तव में पुशस्टेट कमांड को बाद में कैसे नहीं करता है, क्या आप इसे लागू करेंगे? – user280109

+0

यहां एक समाधान मिला, यह सुनिश्चित नहीं है कि यह क्रोम के साथ काम करता है, हालांकि: http://stackoverflow.com/questions/4570093/how-to-get-notified-about-changes-of-the-history-via-history- पुशस्टेट/4585031 # 4585031 – user280109

+0

क्या उत्तर पोस्ट होने के बाद से यह काम करना बंद कर दिया है, या क्या कुछ अनुमति इत्यादि छोड़ दी गई है ...? –

2

डिफ़ॉल्ट कार्रवाई के साथ जारी रखने के लिए मूल pushState समारोह के लिए एक संदर्भ बचाने के लिए, और फिर फोन यह:

var headID = document.getElementsByTagName("head")[0];   
var newScript = document.createElement('script'); 
newScript.type = 'text/javascript'; 
newScript.src = chrome.extension.getURL('script.js'); 
headID.appendChild(newScript); 

script.js:

window.history.pushState = (function(nativePushState) { 
    return function(a,b,c) { 
     // Do something 
     nativePushState.apply(this, arguments); //Continue by calling native history.pushState 
    }; 
})(window.history.pushState) 
6

सुनिश्चित नहीं हूं कि आप background.js या content.js में ऐसा करने की कोशिश कर रहा, लेकिन अगर यह पूर्व है, तो आप ऐसा webNavigation घटनाओं का उपयोग कर सकते हैं:

आप प्रकट में webNavigation के लिए अनुमतियाँ सेट करना होगा। json:

chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) { 
     console.log('Page uses History API and we heard a pushSate/replaceState.'); 
     // do your thing 
    }); 

स्रोत::

"permissions": [ 
    "webNavigation" 
    ], 
फिर background.js में

+1

अगर यह content.js में है तो क्या होगा? क्या आपको अभी भी एक हैक करना है? –

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