【发布时间】:2016-03-16 15:02:54
【问题描述】:
我正在构建一个 chrome 扩展,它使用为特定网络域定制的 JavaScript 库。只能从该特定域调用该库是一个限制(实际上是许可证问题)。
我想将该 js 库加载到我的 chrome 扩展程序中,但由于要使用的库来自 HTTP(不是 HTTPS)URL,因此该扩展程序会出现内容安全策略错误。我为此搜索了 StackOverflow,我看到的唯一选项是在本地加载该文件或通过消息传递。
谁能告诉我在我的background.js 和content.js 中应该有什么代码以及在我的manifest.json 中添加什么权限?
获取该 js 库的网站是,例如,http://library.com/js/xy.js。
我知道在 content.js 中应该有一些其他的东西,比如一些代码。如何从该域加载代码?
manifest.json:
{
"manifest_version": 2,
"name": "abc",
"version": "0.2",
"description": "abc",
"content_security_policy": "script-src 'self'; object-src 'self'",
"browser_action": {
"default_icon": "MM_logo_2009.png",
"default_popup": "tab/popup.html"
},
"background": {
"scripts": ["event.js"],
"persistent": false
},
"permissions": [
"http://library.com/js/xy.js",
"bookmarks",
"tabs",
"storage",
"http://*/*",
"https://*/*"
]
}
event.js:
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://library.com/js/xy.js", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// innerText does not let the attacker inject HTML elements.
document.getElementById("resp").innerText = xhr.responseText;
}
}
xhr.send();
【问题讨论】:
-
等等,你需要它在内容脚本中,还是在事件脚本本身中?你需要更好地解释。
-
我只需要将库注入到我的扩展中,这个 event.js 是我的背景页面,这段代码写在里面@Xan
-
“注入我的扩展”是不明确的,因为您还使用了内容脚本。你到底想把它注入到哪里——背景?内容脚本上下文?页面上下文?
-
@Xan 在内容脚本中,但应该有适当的方式来传达它,例如背景页面应该调用类似 chrome.tabs.executeScript(null, { file: 'content.js' });
-
嗯,那比您描述的要容易很多!只需保存您的
responseText并使用code参数而不是file调用它。
标签: javascript html google-chrome-extension xmlhttprequest message-passing