我正在尝试通过chrome扩展将一些JS代码注入给定的网页。
我正在使用这种方法:
var s = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.extension.getURL('script.js');
s.onload = function() {
this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);
我有一些脚本,我以这种方式加载,除了一个之外它们都很好用。由于某种原因没有正确加载的是kbpgp.js
,它是一个浏览器化的nodejs代码(来源:https://raw.githubusercontent.com/keybase/kbpgp/master/browser/kbpgp.js)
当我通过扩展程序加载它时,我可以看到正在加载实际文件,因为我可以在资源列表中看到它。
如果我使用<script src="https://raw.githubusercontent.com/keybase/kbpgp/master/browser/kbpgp.js"></script>
通过常规html页面获取该代码,我可以看到它暴露了一个名为kbpgp
的方法,而当我尝试通过扩展方法加载它时该方法是不可用。
manifest.json
:
{
"manifest_version": 2,
"name": "Getting started example",
"description": "This extension shows a Google Image search result for the current page",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"activeTab",
"https://ajax.googleapis.com/"
],
"content_scripts": [
{
"matches": [
"https://www.facebook.com/*"
],
"css": [
"css/style.css"
],
"js": [
"lib/init.js"
],
"run_at": "document_end"
}
],
"web_accessible_resources": [
"lib/kbpgp.js",
"lib/jquery.js",
"lib/pgp.js"
]
}
init.js
:
function loadScript(path, callback) {
console.log('Loading', path);
var s = document.createElement('script');
s.src = chrome.extension.getURL(path);
(document.head || document.documentElement).appendChild(s);
console.log(s);
setTimeout(function () {
callback();
}, 2000);
}
loadScript('lib/kbpgp.js', function () {
loadScript('lib/jquery.js', function () {
loadScript('lib/pgp.js', function () {
console.log('PGP Extension loaded');
});
});
});
(请忽略我loadScript
函数的非常难看的实现。)
我可以使用驻留在我的pgp.js文件中的mytest()
函数,但不能使用kbpgp()
文件中的kbpgp.js
方法,即使我可以清楚地看到kbpgp.js在页面内加载。