2012-12-04 10 views
20

Próbowałem wielu sposobów (wszystkie udokumentowane procedury) wstrzyknąć skrypt do konkretnej strony po sprawdzeniu adresu URL w onUpdated.addListener. W końcu poniższy kod z "executescript" wydaje się działać, ale nie idealnie. Mogłem otrzymywać alerty, ale nie mogę znaleźć elementów dokumentu na stronie za pomocą metody getElementById/getElementsByName.zasoby muszą być wymienione w web_accessible_resources oczywistego klucza, aby być ładowane przez strony poza rozszerzeniem

Po przejrzeniu strony skrypt zostaje wstrzyknięty. Ale w konsoli błędów uzyskać:

Odmowa obciążenia chrom-extension: //jfeiadiicafjpmaefageabnpamkapdhe/js/Leoscript.js. Zasoby muszą być wymienione w kluczu manifestu web_accessible_resources, aby mogły być ładowane przez strony spoza rozszerzenia.

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"] 
} 

Mam również zgodę 'web_accessible_resources' do skryptu, ale bez powodzenia. Kod skryptu w tle:

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); 

kod w LeoScript.js, które będą wstrzykiwane do konkretnej strony.

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

Skrypt zawartości: eventPage.js, który został użyty do wstrzyknięcia skryptu.

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

Proszę wskazać mi wszelkie zmiany w powyższym kodzie, które rozwiążą problemy z uprawnieniami. Z góry dziękuję.

Odpowiedz

12

UPDATE: W końcu zorientowali się problem. W pliku eventPage.js próbowałeś wstawić plik js/Leoscript.js, który NIE jest na białej liście, zamiast js/LeoScript.js (z dużymi literami "S"), który znajduje się na białej liście. Zwróć uwagę, że adresy URL to z uwzględnieniem wielkości liter!

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

LeoScript.js:

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

@ 方 觉: Dzięki za odpowiedź, zmęczony już teraz, ale ten sam wynik "Odmowa obciążenia LeoScirpt: Zasoby muszą być wymienione na stronie internetowej_accessible_resources –

+1

Próbowałem znowu i rzeczy wydawały się dziwne. chrome.tabs.executeScript (tabId, {code: ...}) się powiodło, a chrome.tabs.executeScript (tabId, {file: ...}) nie powiodło się (mimo że kod jest taki sam). –

+1

Zaktualizowano ponownie. Proszę spojrzeć. @VineelGogineni –

11

EDIT:

To jest wersja gdzie służy kombinacja web_accessible_resources i Injection pracy

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> 

popup.js *

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

Daj mi znać, jeśli nadal masz problem w coraz to działa

+0

Dzięki Sudarshan, kiedy spróbowałem twojej solutuion, otrzymałem _Error podczas tabs.executeScript: Nie udało się załadować pliku: "chrome-extension: //jfeiadiicafjpmaefageabnpamkapdhe/js/LeoScript.js" ._ Może to być robię coś źle podczas wstrzykiwania skryptu, ponieważ używam skryptu treści: eventPage.js do wstrzykiwania kodu. –

+0

@VineelGogineni: Czy można wyeliminować strukturę folderów dla 'js/LeoScript.js' i zachować ją w ścieżce głównej. Użyj '{file: chrome.extension.getURL (" LeoScript.js ")}' po przeniesieniu pliku do ścieżki głównej, sprawdź odpowiedź Edytowałem to – Sudarshan

+0

Próbowałem usunąć strukturę folderów, ale pojawia się ten sam błąd i jeśli używam _file: chrome.extension.getURL ("LeoScript.js") _ Nie otrzymuję również alertu. –

5

Wiele wyląduje się na tej stronie tego błędu, ponieważ nie zostały one uwzględnione swoje obrazy/zasobów internetowych w manifeście plik .json. Link do dokumentacji api jest pomocny, więc udostępnienie go: web resource in manifest

Powiązane problemy