【发布时间】:2018-05-17 08:55:58
【问题描述】:
我正在开发一个简单的 Chrome 扩展程序,它可以切换(显示/隐藏)特定网页中的链接。
这是一个非常简单的结构,带有一个开关输入,可以打开/关闭扩展。
这里是 popup.js:
var $toggleSwitch = $("#myonoffswitch");
//Local storage state initialization
chrome.storage.sync.get(['sampleChecked'], function (result) {
$("#myonoffswitch").prop("checked", result.sampleChecked);
if (result.sampleChecked) {
setOrangeIcon()
} else {
setWhiteIcon()
}});
function toggleAllLinks() {
chrome.tabs.executeScript({
code: 'toggleLink()'
})}
function setOrangeIcon() {
chrome.browserAction.setIcon({ path: 'icon1.png' })}
function setWhiteIcon() {
chrome.browserAction.setIcon({ path: 'icon2.png' })}
$toggleSwitch.on("change", toggler);
function toggler() {
$toggleSwitchChecked = $toggleSwitch.prop("checked");
chrome.storage.sync.set({ "sampleChecked": $toggleSwitchChecked }, function () {
console.log('Value is set to ' + $toggleSwitchChecked)});
toggleAllLinks();
if ($toggleSwitch.prop("checked")) {
setOrangeIcon();
} else {
setWhiteIcon();
}}
还有我的 content.js
function showLinkCallback(event) {
if (event.target.innerText) {
if (event.target.innerText.indexOf("EIP") != -1) {
var link = $("label:contains('EIP')~a")
.after("<a>Demo Page</a>")
.css({
'display': "inline",
'margin': "5px"
});
var endpoint = $("a:contains('Demo Page')")
var r = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/;
let authorIP = link[0].href;
let dispatchIP =link[1].href;
let publishIP = link[2].href;
var trimAuthor = authorIP.match(r);
var trimDispatch = dispatchIP.match(r);
var trimPublish = publishIP.match(r);
var authorEndpoint = $(endpoint)[0];
var dispatchEndpoint = $(endpoint)[1];
var publishEndpoint = $(endpoint)[2];
$(authorEndpoint).attr('href', 'http://'+trimAuthor+':4502/content/hello-world.html');
$(dispatchEndpoint).attr('href', 'http://'+trimDispatch+'/content/hello-world.html');
$(publishEndpoint).attr('href', 'http://'+trimPublish+':4503/content/hello-world.html');
toggleLink();
}}}
document.querySelector(".content").addEventListener('DOMNodeInserted', showLinkCallback);
function toggleLink() {
chrome.storage.sync.get(["sampleChecked"], function (result) {
if (result.sampleChecked) {
$("label:contains('EIP')~a~a").show();
} else {
$("label:contains('EIP')~a~a").hide();
}})};
所以我的问题是:
当我打开/关闭扩展时,链接会切换(显示/隐藏),当我重新加载页面时,它会保存扩展的状态。 我想要的是当我复制选项卡并打开/关闭按钮时,所有复制选项卡中的链接实时同时显示/隐藏,而无需重新加载页面。
我想它与 background.js 文件有关,但我在设置正确的脚本时遇到了问题。
【问题讨论】:
标签: javascript google-chrome google-chrome-extension