2012-12-04 24 views
20

के बाहर पृष्ठों द्वारा लोड किए जाने के लिए संसाधनों को web_accessible_resources मेनिफेस्ट कुंजी में सूचीबद्ध किया जाना चाहिए। मैंने UPUpdated.addListener पर URL की जांच करने पर एक विशिष्ट पृष्ठ में स्क्रिप्ट को इंजेक्ट करने के कई तरीकों (सभी दस्तावेजी प्रक्रियाओं) की कोशिश की है। अंत में 'executescript' के साथ नीचे दिया गया कोड काम करता है, लेकिन पूरी तरह से नहीं। मैं अलर्ट प्राप्त करने में सक्षम था लेकिन getElementById/getElementsByName के माध्यम से पृष्ठ के दस्तावेज़ तत्वों को ढूंढने में सक्षम नहीं हो सकता।संसाधन

जब मैंने पृष्ठ का निरीक्षण किया, तो स्क्रिप्ट इंजेक्शन दी गई। लेकिन त्रुटि कंसोल में मुझे मिलता है:

क्रोम-एक्सटेंशन का लोड अस्वीकार करना: //jfeiadiicafjpmaefageabnpamkapdhe/js/Leoscript.js। विस्तार से बाहर पृष्ठों द्वारा लोड किए जाने के लिए संसाधनों को web_accessible_resources मेनिफेस्ट कुंजी में सूचीबद्ध होना चाहिए।

manifest.json:

{ 
    "name": "Leo Extension for Job Boards", 
    "version": "1.6", 
    "manifest_version": 2, 
    "content_security_policy": "script-src 'self'; object-src 'self'", 
    "description": "Leo Extension", 
    "background": { 
    "scripts": ["js/Leojshelper.js"], 
    "persistent": true 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["<all_urls>"], 
     "js": ["js/eventPage.js"], 
     "run_at" : "document_start" 
    } 
    ], 
    "icons":{"48":"images/bob48.png", "128":"images/bob128.png"}, //Define any icon sizes and the files that you want to use with them. 48/128 etc. 
    "browser_action": { 
    "default_icon": "images/bob.png",  // What icon do you want to display on the chrome toolbar 
    "default_popup": "LeoExtwatch.html"  // The page to popup when button clicked. 
    }, 
    "permissions": [ 
    "tabs", "<all_urls>"  // "http://*/*","https://*/*"    // Cross Site Access Requests 
    ], 
    "web_accessible_resources": ["js/LeoScript.js"] 
} 

मैं भी स्क्रिप्ट के लिए 'web_accessible_resources की अनुमति नहीं सफलता दे दिया है, लेकिन अभी भी। पृष्ठभूमि स्क्रिप्ट में कोड:

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
    if (changeInfo.status == 'complete') { 
     if (tab.url.indexOf("in.yahoo") !== -1) { 
      chrome.tabs.update(tabId, { url: "https://login.yahoo.com/config/mail?.intl=us" }); 
      chrome.tabs.executeScript(tabId, { 
       code: "document.body.appendChild(document.createElement('script')).src='" + 
    chrome.extension.getURL("js/LeoScript.js") + "';" 
      }, null); 

लियोस्क्रिप्ट.जेएस में कोड, जिसे विशिष्ट पृष्ठ में इंजेक्शन दिया जाएगा।

$(document).ready(function() { 
    alert('injected'); 
    document.getElementById('username').value='aaaaaaa'; 
}); 

सामग्री स्क्रिप्ट: eventPage.js जो मैं स्क्रिप्ट इंजेक्ट करता था।

var script = document.createElement('script'); 
    script.src = chrome.extension.getURL("js/Leoscript.js"); 
    (document.body || document.head || document.documentElement).appendChild(script); 

कृपया मुझे उपरोक्त कोड में किसी भी बदलाव पर इंगित करें जो अनुमति मुद्दों को हल करेगा। अग्रिम में धन्यवाद।

उत्तर

12

अद्यतन: अंततः आपकी समस्या का पता लगाया। EventPage.js में, आपने js/Leoscript.js को इंजेक्ट करने का प्रयास किया, जिसे जेएस/लियोस्क्रिप्ट.जेएस (पूंजी 'एस' के साथ) श्वेतसूची के बजाय श्वेतसूची नहीं दिया गया है। ध्यान दें कि यूआरएल केस-संवेदी हैं!

chrome.tabs.executeScript(tabId, {file: 'js/LeoScript.js'}); 

LeoScript.js:

alert('injected'); 
document.getElementById('username').value='aaaaaaa'; 
+1

@ 方 觉: प्रतिक्रिया के लिए धन्यवाद, यह सिर्फ अब थक गया, लेकिन एक ही परिणाम 'LeoScirpt का भार को नकार: संसाधन web_accessible_resources –

+1

मैंने कोशिश में सूचीबद्ध होना चाहिए फिर और चीजें डरावनी लग रही थी। chrome.tabs.executeScript (tabId, {code: ...}) chrome.tabs.executeScript (tabId, {file: ...}) के दौरान सफल हुआ (हालांकि कोड सभी समान है)। –

+1

फिर से अपडेट किया गया। कृपया देख लीजिये। @VineelGogineni –

11

संपादित करें:

इस संस्करण में जहां web_accessible_resources और Injection के संयोजन प्रयोग किया जाता है काम कर रहा है

manifest.json

{ 
"name":"Off Screen Tabs Demo", 
"description":"This demonstrates Off Screen Tabs API", 
"manifest_version":2, 
"version":"1", 
"permissions":["tabs","<all_urls>"], 
"browser_action":{ 
    "default_icon":"screen.png", 
    "default_popup":"popup.html" 
}, 
"web_accessible_resources": ["js/LeoScript.js"] , 
"permissions":["tabs","<all_urls>"] 
} 

LeoScript.js

alert("Injected.."); 

popup.html

<html> 
<head> 
<script src="popup.js"></script> 
</head> 
<body> 
</body> 
</html> 

पॉपअप।js *

document.addEventListener("DOMContentLoaded",function(){ 
    chrome.tabs.executeScript({"file": "js/LeoScript.js"}); 
}); 

मुझे पता है अगर आप अभी भी यह

का प्रदर्शन शुरू करने में समस्या है चलो
+0

धन्यवाद सुदर्शन, जब मैंने आपके समाधान की कोशिश की तो मुझे _s.recror टैब के दौरान त्रुटि मिली: फ़ाइल लोड करने में विफल: "क्रोम-एक्सटेंशन: //jfeiadiicafjpmaefageabnpamkapdhe/js/LeoScript.js" ._ हो सकता है कि मैं कुछ कर रहा हूँ स्क्रिप्ट इंजेक्शन करते समय गलत, क्योंकि मैं सामग्री स्क्रिप्ट का उपयोग कर रहा हूं: eventPage.js कोड इंजेक्ट करने के लिए। –

+0

@VineelGogineni: क्या आप 'जेएस/लियोस्क्रिप्ट.जेएस' के लिए फ़ोल्डर संरचना को खत्म कर सकते हैं और इसे रूट पथ में रख सकते हैं। रूट पथ पर फ़ाइल को स्थानांतरित करने के बाद '{file: chrome.extension.getURL (" LeoScript.js ")} 'का उपयोग करें, उत्तर की जांच करें मैंने इसे संपादित किया है – Sudarshan

+0

मैंने फ़ोल्डर संरचना को खत्म करने का प्रयास किया, लेकिन एक ही त्रुटि प्रकट होती है और यदि मैं _file का उपयोग करता हूं: chrome.extension.getURL ("LeoScript.js") _ मुझे भी चेतावनी नहीं मिल रही है। –

5

कई इस त्रुटि के लिए इस पेज पर पहुंचेंगे, क्योंकि वे उनके चित्र/वेब संसाधनों प्रकट में शामिल नहीं किया है .json फ़ाइल। API दस्तावेज़ के लिए लिंक उपयोगी है, तो यह साझा करने: web resource in manifest