gpt4 book ai didi

javascript - 我如何在谷歌扩展中打开/关闭 content_scripts?

转载 作者:搜寻专家 更新时间:2023-11-01 04:26:03 24 4
gpt4 key购买 nike

我有这个简单的扩展,它在 chrome 的工具栏上显示图标并显示启用/禁用按钮。我想向按钮添加功能以禁用或启用在访问谷歌网站时触发的 content_script.js:

弹出窗口

var setLayout = function(){
var list = document.createElement('ul');

var enable = document.createElement('li');
enable.appendChild(document.createTextNode('Enable Script'));
enable.onclick = function(){toggle(0)};

var disable = document.createElement('li');
disable.appendChild(document.createTextNode('Disable Script'));
disable.onclick = function(){toggle(1)};

list.appendChild(disable);
document.body.appendChild(list);

function toggle(n){
list.removeChild( n == 0 ? enable : disable);
list.appendChild(n == 0 ? disable : enable);
}
};

document.addEventListener('DOMContentLoaded', setLayout, false);

list .json

{
"manifest_version": 2,

"name": "test",
"description": "test",
"version": "1.0",

"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"content_scripts": [
{
"matches": ["https://www.google.co.uk/"],
"js": ["content_scripts.js"]
}
]
}

content_scripts.js

(function(){
alert('hello');
})();

我是 google 扩展的新手,不知道该怎么做,我想在单击禁用/启用按钮后更改 manifist,但在阅读 google 网站上的文档后找不到正确的命令来执行此操作!

如有任何帮助,我们将不胜感激。

最佳答案

经过一番研究,我想出了如何使用backround pagessendMessagelocalstorage 来解决这个问题。

background pages 充当 popup.jscontent_scripts.js 之间的通信器,它们位于两个不同的文档中,并且不可能直接在它们之间传递变量。

要在 mamifest 中启用背景页面,我添加了:

"background": {
"scripts": ["background.js"],
"persistent": true
},

localstorage 在本地保存变量并记住它们,即使浏览器关闭并再次打开,所以当启用/禁用按钮被点击时它设置 localStorage['status'] = 1/0 可以通过 background.js 访问并传递给 content_scripts.js

要设置我添加到 popup.js 的 localStorage 变量:

if(!localStorage.status) localStorage['status'] = 1;
toggle(2);
enable.onclick = function(){toggle(0)};
disable.onclick = function(){toggle(1)};
function toggle(n){
if((n == 0) && (enable.parentNode == list)){
list.removeChild(enable);
list.appendChild(disable);
localStorage.status = 1;
}else if((n == 1) && (disable.parentNode == list)){
list.removeChild(disable);
list.appendChild(enable);
localStorage.status = 0;
}else if((n == 2) && (!list.hasChildNodes())){
list.appendChild((localStorage.status == 1) ? disable : enable);
chrome.browserAction.setIcon({path: (localStorage.status == 1) ? "icons/icon19.png" : "icons/icon19_disabled.png"});
}else{
return;
}
}

要将 localStorage.status 传递给 content_scripts.js 我必须在 content_scrips.js 上使用 sendMessage加载时向 background.js 发送请求消息,background.js 上的 onMessage 监听请求并向 content_scripts 发送响应。 jslocalStorage.status 值。

背景.js:

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.type == "status") sendResponse({status: localStorage.status});
});

content_scripts.js

var fn = function(){...};
chrome.runtime.sendMessage({type: "status"}, function(response) {
if(response.status == 1) fn();
return;
});

就是这样,希望有人觉得它有用。

关于javascript - 我如何在谷歌扩展中打开/关闭 content_scripts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174093/

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