gpt4 book ai didi

javascript - 从 popup.js chrome 扩展调用 inject.js 方法

转载 作者:行者123 更新时间:2023-11-30 20:44:52 27 4
gpt4 key购买 nike

我正在构建一个修改页面 DOM 的 chrome 扩展。我注入(inject)了 inject.js,它工作正常。
list :

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

页面.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);

背景.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。

最佳答案

感谢@wOxxOm,我能够从 popup.js 调用 inject.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
});

关于javascript - 从 popup.js chrome 扩展调用 inject.js 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829110/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com