我已经尝试了很多方法(所有文档化的程序),在检查onUpdated.addListener上的URL时将脚本注入特定页面。最后,下面的代码包含' executioncript'似乎工作,但不完美。我能够收到警报,但无法通过getElementById / getElementsByName查找页面的文档元素。
当我检查页面时,脚本被注入。但在错误控制台中我得到:
拒绝加载chrome-extension://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"]
}
我还给了&#39; web_accessible_resources&#39;对脚本的许可,但仍然没有成功。后台脚本中的代码:
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);
LeoScript.js中的代码,将被注入特定页面。
$(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);
请指出上述代码中的任何更改,以解决权限问题。提前谢谢。
答案 0 :(得分:14)
更新:终于找到了问题所在。在eventPage.js中,您尝试注入未列入白名单的js / Leoscript.js,而不是js / LeoScript.js(使用大写“S”),该列表已列入白名单。请注意,网址区分大小写!
chrome.tabs.executeScript(tabId, {file: 'js/LeoScript.js'});
LeoScript.js:
alert('injected');
document.getElementById('username').value='aaaaaaa';
答案 1 :(得分:12)
编辑:
这是使用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>
的 popup.js 强> 的 * 强>
document.addEventListener("DOMContentLoaded",function (){
chrome.tabs.executeScript( {"file": "js/LeoScript.js"});
});
如果您仍然遇到运行问题,请告诉我
答案 2 :(得分:6)
许多人会在此页面上出现此错误,因为他们没有将他们的图片/网络资源包含在manifest.json文件中。指向api文档的链接很有用,因此请分享:web resource in manifest