जावा स्क्रिप्ट कोड निम्नलिखित समूहों में विभाजित किया जा सकता:
एक्सटेंशन कोड - सभी के लिए पूर्ण पहुंच chrome.*
एपीआई की अनुमति दी।
इसमें background page शामिल हैं, और सभी पृष्ठ जिनके पास chrome.extension.getBackgroundPage()
, browser pop-ups जैसे सीधे पहुंच है।
Content scripts (मैनिफ़ेस्ट फ़ाइल या chrome.tabs.executeScript
के माध्यम से) - chrome
एपीआई में से कुछ के Partial का उपयोग, पृष्ठ के डोम के लिए पूरा उपयोग (window
वस्तुओं में से किसी को नहीं, फ्रेम सहित)।
सामग्री स्क्रिप्ट एक्सटेंशन और पृष्ठ के बीच एक दायरे में चलती हैं। एक सामग्री स्क्रिप्ट का वैश्विक window
ऑब्जेक्ट पृष्ठ/एक्सटेंशन के वैश्विक नामस्थान से अलग है।
इंजेक्ट स्क्रिप्ट (this method के माध्यम से एक सामग्री लिपि में) - पेज में सभी संपत्तियों के लिए पूर्ण पहुंच। chrome.*
एपीआई में से किसी भी तक पहुंच नहीं।
इंजेक्शन स्क्रिप्ट इस तरह व्यवहार करते हैं जैसे कि वे पृष्ठ द्वारा स्वयं शामिल किए गए थे, और विस्तार से किसी भी तरह से जुड़े नहीं हैं। विभिन्न इंजेक्शन विधियों पर अधिक जानकारी जानने के लिए this post देखें।
इंजेक्शन स्क्रिप्ट से सामग्री स्क्रिप्ट में एक संदेश भेजने के लिए, घटनाओं का उपयोग किया जाना चाहिए। उदाहरण के लिए this answer देखें। नोट: एक संदर्भ से दूसरे संदर्भ में एक संदेश के भीतर भेजा गया संदेश स्वचालित रूप से (JSON) -साधिकृत और पार्स किया गया है।
आपके मामले में, पृष्ठभूमि पृष्ठ (chrome.tabs.onUpdated
) में कोड की संभावना से पहले सामग्री स्क्रिप्ट script.js
मूल्यांकन किया जाता है कहा जाता है। तो, आपको ReferenceError
मिलेगा, क्योंकि init
नहीं है।
इसके अलावा
, जब आप chrome.tabs.onUpdated
उपयोग करते हैं, सुनिश्चित करें कि आप परीक्षण है कि चाहे पेज को पूरा भरा है, क्योंकि दो बार घटना आग बनाने: लोड करने से पहले, और खत्म पर:
//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
// Execute some script when the page is fully (DOM) ready
chrome.tabs.executeScript(null, {code:"init();"});
}
});
स्रोत
2012-03-28 21:41:34
'क्रोम के बारे में टिप के लिए धन्यवाद .tabs.on अद्यतन 'दो बार फायरिंग। तो मेरा सवाल है कि मुझे लगता है कि मैं 'init() 'इंजेक्ट कैसे करूं? क्या मुझे अपने सभी जावाScripts इंजेक्ट करना चाहिए? 'init() 'सामान्य रूप से तब कॉल किया जाता है जब उपयोगकर्ता ब्राउज़र एक्शन आइकन पर क्लिक करता है, और' init() 'अन्य कार्यों का एक समूह ट्रिगर करता है। – Jon
@ user1277607 जब इसे किसी भी पृष्ठ के वैश्विक चर का उपयोग करना होता है, तो स्क्रिप्ट को इंजेक्ट करें। जब 'फ़ंक्शन init' को पृष्ठ और एक्सटेंशन कोड दोनों तक पहुंच प्राप्त होती है, तो सामग्री स्क्रिप्ट का उपयोग करें। ** [लिंक किए गए उत्तर] देखें (http://stackoverflow.com/a/9517879/938089?building-a-chrome-extension-inject-code-in-a-page-using-a-content-script) * * स्क्रिप्ट को इंजेक्ट करने के तरीके को देखने के लिए, और ** [यह उत्तर] (http://stackoverflow.com/a/9636008/938089?chrome-extension-retrieving-gmails-original-message) ** लागू करने पर दिशानिर्देश के लिए सामग्री स्क्रिप्ट जिसे पृष्ठ के चर का उपयोग करना है। –
आपको बहुत बहुत धन्यवाद। यह खूबसूरती से काम किया :) – Jon