我正在构建一个修改页面DOM的chrome扩展程序。
我注入inject.js
并且工作正常
清单:
"manifest_version": 2,
"web_accessible_resources": ["js/inject.js"],
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
"background": { "scripts": ["js/background.js"] },
"content_scripts" :[
{
"matches" : [
"*://*.somesite.com/*"
],
"js" : ["js/page.js"],
"run_at" : "document_idle"
}
],
"page_action": {
"default_icon": {
"16": "images/icon16.png",
"24": "images/icon24.png",
"32": "images/icon32.png"
},
"default_title": "some name",
"default_popup": "popup.html"
}
page.js:
chrome.runtime.sendMessage({type:'showPageAction'});
var s = document.createElement('script');
// TODO: add "script.js" to web_accessible_resources in manifest.json
s.src = chrome.extension.getURL('js/inject.js');
s.onload = function() {
this.remove();
};
(document.head || document.documentElement).appendChild(s);
background.js:
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
if(message.type === 'showPageAction'){
chrome.pageAction.show(sender.tab.id);
}
});
现在我还有popup.html
,popup.js
,弹出页面中有一个复选框。 点击复选框应调用inject.js
中的某个功能,但我无法实现此功能。
我也试过location.href="javascript:disableFeature(); void 0";
但Chrome拒绝了内联JS。
答案 0 :(得分:1)
感谢@wOxxOm我可以从popup.js中调用inject.js中的方法。
以下是示例代码。
popup.js
// event is triggered in inject.js whenever below code is run
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, { method: "enableFeature" }, function (response) {
});
});
page.js / content.js
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
var evt = document.createEvent("CustomEvent");
evt.initCustomEvent(request.method, true, true);
document.dispatchEvent(evt);
});
inject.js
document.addEventListener('enableFeature', function (e)
{
// add your code here
});