2013-02-16 43 views
6

पृष्ठभूमि स्क्रिप्ट में सामग्री स्क्रिप्ट app.js से परिवर्तनीय app तक पहुंच कैसे प्राप्त करें? Error during tabs.executeScript: Cannot access contents of url "chrome-devtools://devtools/devtools.html?docked=true&dockSide=bottom&toolbarColor=rgba(223,223,223,1)&textColor=rgba(0,0,0,1)". Extension manifest must request permission to access this host. \n Uncaught ReferenceError: app is not defined chrome.tabs.executeScript: पृष्ठभूमि स्क्रिप्ट में सामग्री स्क्रिप्ट से परिवर्तनीय तक पहुंच कैसे प्राप्त करें?

यहाँ manifest.json है:

{ 
    "name": "ctrl-vk", 
    "version": "0.1.3", 
    "manifest_version": 2, 
    "description": "Chrome extension for ctrl+v insertion of images to vk.com", 

    "content_scripts": [{ 
    "matches": [ 
     "http://*/*", 
     "https://*/*" 
    ], 
    "js": ["jquery-1.9.1.min.js" 
    ], 
    "run_at": "document_end" 
    }], 

    "web_accessible_resources": [ 
    "jquery-1.9.1.min.js" 
    ], 

    "permissions" : [ 
    "tabs", 
    "http://*/*", 
    "https://*/*" 
    ], 

    "background": { 
    "persistent": false, 
    "scripts": ["background.js"] 
    } 
} 

उदाहरण के लिए पूर्ण कोड, पर

chrome.tabs.executeScript(null, { file: "app.js" }, function() { 
    app.getSettings('authorizeInProgress'); //... 
}); 

यहाँ मैं क्या मिलता है:

यहाँ कैसे मैं इसे करने की कोशिश (background.js) है गीथब

https://github.com/MaxLord/ctrl-vk/tree/with_bug

+0

मुझे पता चला, जब हम पहली बार तर्क को निष्पादित करने के लिए शून्य के रूप में पास करते हैं - इसका मतलब है कि हम * वर्तमान * टैब में स्क्रिप्ट निष्पादित करने का प्रयास कर रहे हैं। यह स्पष्ट रूप से हम नहीं चाहते हैं .. हम वर्तमान में एक तरीके की जरूरत है कैसे इस लानत टैब की आईडी प्राप्त करने के लिए .. – milushov

उत्तर

2

chrome.tabs.executeScript(null, { 
    file: "app.js" 
}, function() { 

    if (app.getSettings('authorizeInProgress')) { 
     alert('my tab'); 
     REDIRECT_URI = app.getSettings('REDIRECT_URI'); 
     if (tab.url.indexOf(REDIRECT_URI + "#access_token") >= 0) { 
      app.setSettings('authorize_in_progress', false); 
      chrome.tabs.remove(tabId); 
      return app.finishAuthorize(tab.url); 
     } 
    } else { 
     alert('not my'); 
    } 

}); 

स्पष्टीकरण

  • chrome://extensions/ पेज भी chrome.tabs.onUpdated ईवेंट सक्रिय करने के बजाय
    if (tab.url.indexOf("chrome-devtools://") == -1) { 
        chrome.tabs.executeScript(tabId, { 
         file: "app.js" 
        }, function() { 
    
         if (app.getSettings('authorizeInProgress')) { 
          alert('my tab'); 
          REDIRECT_URI = app.getSettings('REDIRECT_URI'); 
          if (tab.url.indexOf(REDIRECT_URI + "#access_token") >= 0) { 
           app.setSettings('authorize_in_progress', false); 
           chrome.tabs.remove(tabId); 
           return app.finishAuthorize(tab.url); 
          } 
         } else { 
          alert('not my'); 
         } 
    
        }); 
    } 
    

    कोड

    निम्नलिखित उपरोक्त त्रुटि उपयोग से बचने के लिए, इससे बचने के लिए हमें सभी देव-टूल पृष्ठों को छोड़ने के लिए एक फ़िल्टर जोड़ना होगा।
+0

धन्यवाद, यह पहली त्रुटि से बचने में मदद करता है। –

+2

आपको सामग्री स्क्रिप्ट के पार्स वैल्यू के लिए 'executeScript()' फ़ंक्शन से सरणी के संदेश पासिंग या वापसी मान का उपयोग करना होगा .. – Sudarshan

+0

'टैब' चर कहां है? मुझे 'असीमित संदर्भ त्रुटि मिलती है: टैब परिभाषित नहीं किया गया है' – Vladislav

0

हम चाहते हैं कि नोटिस देना चाहिए, प्रकट cofig में:

"content_scripts": [{ 
"matches": [ 
    "http://*/*", 
    "https://*/*" 
], 
"js": ["jquery-1.9.1.min.js" 
], 
"मैच" में

हिस्सा है, केवल http, https मिलान किया जाता है, इसलिए यदि आप की तरह पेज में अपने विस्तार को लोड: क्रोम ': // एक्सटेंशन/', या' फ़ाइल: /// डी: xxx ', वह त्रुटि होगी।

आप यूआरएल 'http: //' के साथ पृष्ठ में अपना एक्सटेंशन लोड कर सकते हैं; या अपने 'मैचों' सरणी में और नियम जोड़ें।

1

(स्वीकार किए जाते हैं जवाब देने के लिए टिप्पणी के रूप में इस सबमिट करने के बाद होगा, लेकिन अभी भी आवश्यक प्रतिष्ठा की कमी)

तुम भी तुम्हारे पास है, जब पहले तर्क के रूप में chrome.tabs.executeScript को tabId देना चाहिए। अन्यथा आप यूआरएल और background.js अनुरोध करने के बाद गलत पेज के खिलाफ निष्पादन स्क्रिप्ट कर रहे हैं, तो उपयोगकर्ता स्विचिंग विंडो/टैब को सही तरीके से जोखिम देते हैं।

हिंडसाइट पर काफी स्पष्ट होने पर मुझे एक लूप के लिए फेंक दिया गया जब मुझे वही त्रुटि संदेश मिला "यूआरएल की सामग्री तक नहीं पहुंच सकता" क्रोम-डेवटोल्स: // .. "भले ही मेरा chrome.tabs.onUpdated eventhandler यह जांच रहा था अनुरोध किए गए पृष्ठ उपयोगकर्ता ने executeScript कॉल करने से पहले कुछ विशिष्ट डोमेन नाम था।

तो ध्यान रखें, chrome.tabs.executeScript (null, ..) सक्रिय विंडो में स्क्रिप्ट चलाता है, भले ही सक्रिय विंडो हो डेवलपर टूल्स इंस्पेक्टर।