我正在尝试编写一个Chrome扩展程序,只需单击浏览器操作图标即可将其禁用。我想为用户提供此选项,因为扩展名在触发警报时会引发JavaScript警报。问题是,即使清除了警报后,我仍然看到警报正在发出。另外,我想用作开关的图标单击无法正常工作。

我已经在manifest.json中将background.js声明为我的背景javascript文件

"background": {
    "scripts": ["alert.js"],
    "persistent": true
},
"browser_action": {
    "default_icon": "images/green.png",
    "default_action": "popup.html",
    "default_title": "Toggle Productiwitty"
}


background.js

var ExtensionOn = true;

function SwitchOn(e)
{
    chrome.alarms.create("Alarm", {delayInMinutes: 0.1, periodInMinutes: 1} );
}

function SwitchOff(e)
{
    chrome.alarms.clear("Alarm");
}

function showpopup()
{
    alert("Inside function showpopup");
    console.log("alert shown");
}

function click(e)
{
    if(ExtensionOn)
    {
        SwitchOff();
        console.log("switched off");
        chrome.browserAction.setBadgeText({text: "Off"});
    }
    else if(!ExtensionOn)
    {
        SwitchOn();
        console.log("switched on");
        chrome.browserAction.setBadgeText({text: "ON"});
        // Replace 15.0 with user selected time in minutes
    }
    //Toggle ExtensionOn
    ExtensionOn = ~ ExtensionOn;
}

if(ExtensionOn)
{
    chrome.alarms.onAlarm.addListener(showpopup);
}
chrome.browserAction.onClicked.addListener(click);


我的“ default_action”:“ popup.html”调用popup.js来创建警报

chrome.alarms.create("Alarm", {delayInMinutes: 0.1, periodInMinutes: 1} );


这个想法是,一旦扩展被加载,它应该每隔1分钟显示一次弹出窗口,如果您单击该图标,该扩展将暂时被禁用。再次单击该图标时,将定期发出相同的警报。

最佳答案

ExtensionOn = true
> true
ExtensionOn = ~ ExtensionOn
> -2
Boolean(ExtensionOn)
> true


如果要切换布尔值,请使用!,而不是~

if(ExtensionOn)
{
    chrome.alarms.onAlarm.addListener(showpopup);
}


第一次加载页面时,仅调用一次。如果该扩展当时没有打开,则不会添加监听器,并且永远不会调用该函数。我建议将if测试移到showpopup中。

关于javascript - 单击图标禁用扩展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33019030/

10-12 14:22
查看更多