0

我不敢相信我仍然有基本的编程问题......我知道基础知识,但仍然很难实现我想到的逻辑。无论如何

我正在构建这个基本的 Chrome 扩展,它有一个 JavaScript 文件,它确实有效!唯一的问题是,一旦我单击该图标,它就会永远打开,直到我将其删除。我想添加一个基本的切换功能,但我很难获得一个工作原型。这是我的一些想法:

var toggle == 1; // or true, i.e. clicked
if (functionName() == 1) {
    function functionName() {
        Do whatever it is when clicked;
        blah blah blah;
        } else if (functionName() == 0) {
            Turn off;
        } else {};
}

switch(toggle)
{
    case 1:
        Do whatever it is when clicked;
        blah blah blah;
        break;
case 2:
        Turn off;
         break;
default:
        error;
        break;
}

如果 if 语句和 switch 语句的顺序不同,比如交换了 case 1 和 2,我认为这不会有区别。我不认为 switch 语句是最好的方法,因为只有两个选项,开或关。

改变扩展条件的while循环怎么样?我知道模运算符,代码可以写成:

  • 1 % 2 = 错误,
  • 2 % 2 = 真,
  • 3 % 2 = 错误等

    然后一个基本的 if 语句就可以工作了......

    就像是:

    var i = 1;
    while (i % 2 == 1) {
         Do whatever it is when clicked;
         blah blah blah;
         i++;
         }
    

    有人知道最好的方法吗?我玩过 jQuery .toggle() 事件,但我认为这不会发生。我在 html 文档中什么都没有,只有一个 JavaScript 文件。$("chrome.browserAction.onClicked.addListener(function)")当可以使用简单的 JavaScript 时,它会加载库然后使用 jQuery 选择器。另外,我什至不知道这是否是正确的选择器...

任何帮助都会很棒,在此先感谢。

作为记录,当涉及到不应该复杂的事情时,我发现示例扩展毫无用处。

谢谢!

在 background.js 中使用我的函数更新代码:

function trigger() {
    chrome.browserAction.onClicked.addListener(function(tab) {
chrome.windows.onFocusChanged.addListener(function(windowId) {
    if (windowId != chrome.windows.WINDOW_ID_NONE) {
        chrome.tabs.query({ active:true, windowId:windowId }, function(tabs) {
            if (tabs.length == 1) {
                var tab = tabs[0];
                chrome.tabs.reload(tab.id);
            }
        });
    }
});
});
}
var functionOn = false;
chrome.browserAction.onClicked.addListener(function() {
    if (functionOn === false) {
                    document.addEventListener('DOMContentLoaded', function() {
                    trigger();
                    });
                functionOn = true;
            } else if (functionOn === true) {
                document.addEventListener('DOMContentLoaded', function() {
                    //nothing...
                });
                functionOn = false;
            }

if 语句目前不起作用,我的扩展使用此调用而不是最后的 if 语句:

document.addEventListener('DOMContentLoaded', function() {
    trigger();
});
4

1 回答 1

0

如果不确切知道应该切换什么,很难给你一个超级详细的答案,但简而言之,你只需要在你的后台脚本中添加这样的东西:

var functionOn = false;
chrome.browserAction.onClicked.addListener(function() {
    if (functionOn === false) {
        doSomething();
        functionOn = true;
    } else {
        functionOn = false;
        // Don't do anything.
    }
});

通过将变量“functionOn”放在后台页面中,状态是持久的。您可能已经意识到这一点,但要创建后台脚本,您只需将其添加到清单文件中:

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

很难说你想用切换做什么,但 doSomething() 基本上是你试图执行的任何操作,无论是通过内容脚本注入代码还是显示弹出窗口等。

于 2013-08-10T23:52:34.387 回答