【问题标题】:Chrome extension keyboard shortcut takes 2 presses to change valueChrome 扩展键盘快捷键需要 2 次按下才能更改值
【发布时间】:2018-04-29 15:05:11
【问题描述】:

我在尝试在我正在开发的 Chrome 扩展程序中实现 Chrome keyboard shortcuts API 时遇到了一个奇怪的问题。简而言之,我必须按指定的键盘快捷键 2 次才能更改存储的值。

这是我的键盘快捷键监听器:

chrome.commands.onCommand.addListener(function(command) {
    chrome.storage.sync.get([command], function(result) {
        toggle = result[command];
    });

    toggle = toggle_value(toggle)

    chrome.storage.sync.set({[command]: toggle }, function() {
        console.log( {[command]: toggle} );
    });
});

还有我的toggle_value() 函数:

function toggle_value(value) {
    if(value == 0) {
        return 1;
    } else if(value == 1) {
        return 0;
    }   
}

我的键盘快捷键监听器接收到清单中设置的 command,从 Chrome synced storage 数据库中获取相同键名的相应值,切换该值,然后使用相同的设置将其设置回 Chrome 同步存储键名。

如前所述,command 键的值只有在连续按下键盘快捷键 2 次后才会真正切换。我花了几个小时调试这个没有运气,请帮助我。

【问题讨论】:

  • Chrome API 是 asynchronous,请参阅链接主题以获取解决方案。
  • @wOxxOm 我不会完全称其为重复项,但您链接的问题确实解决了我在代码中遇到的问题。
  • 这里就是一个副本。只要答案适用,它就不必是精确的副本。

标签: javascript google-chrome google-chrome-extension


【解决方案1】:

问题。您使用的函数是异步的,但您的代码是同步运行的。如果嵌套,您的代码应该可以工作。

chrome.commands.onCommand.addListener(function(command) {
    chrome.storage.sync.get([command], function(result) {
        toggle = result[command];
        toggle = toggle_value(toggle);
        chrome.storage.sync.set({[command]: toggle }, function() {
            console.log( {[command]: toggle} );
        });
    });
});

建议。您应该查看Promises 以更优雅地处理异步代码。

【讨论】:

  • 非常有趣,我知道异步 JavaScript 是如何工作的,但我是 Chrome API 的新手,没想到会是这样。我完全理解该解决方案并且它有效,谢谢。
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多