gpt4 book ai didi

firefox-addon - 带有多个窗口的空白 Firefox 插件面板页面

转载 作者:行者123 更新时间:2023-12-02 03:25:10 28 4
gpt4 key购买 nike

我关注了MDN's document创建一个切换按钮插件。

除了一个问题,一切正常:

  1. 打开第二个浏览器窗口(cmd+n 或 ctrl+n)并单击那里的切换按钮
  2. 在不关闭第二个窗口上的切换按钮的情况下,单击原始浏览器窗口上的切换按钮
  3. 切换按钮的面板变为空白并显示以下错误消息:

    JavaScript 错误:resource:///modules/WindowsPreviewPerTab.jsm,第 406 行:NS_ERROR_FAILURE:组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [nsITaskbarTabPreview.invalidate]

problem screenshot

// ./lib/main.js
var { ToggleButton } = require("sdk/ui/button/toggle");
var panels = require("sdk/panel");
var self = require("sdk/self");

var buttonIndex = 0;
var lastKnownButtonIndex = 0;

var button = ToggleButton({
id: "button",
label: "my button",
icon: {
"16": "./icon-16.png"
},
onClick: handleChange,
});

var panel = panels.Panel({
contentURL: self.data.url("menu.html"),
onHide: handleHide
});

function handleChange(state) {
if (state.checked) {
panel.show({
position: button
});
}
}

function handleHide() {
button.state('window', {checked: false});
}

function assignButtonIndex() {
return (buttonIndex++).toString();
}

完整的插件在这里:https://goo.gl/9N3jle

要重现:解压缩 zip 文件并 $ cd testButton; cfx run 并按照上述步骤操作。

我真的希望有人能帮我解决这个问题。提前致谢!

最佳答案

这是一个错误;你没有做错任何事。这是窗口焦点事件和面板事件之间的竞争条件,以某种方式阻止面板的隐藏事件正确发出。

您可以尝试通过解决方法来缓解问题,直到问题得到妥善解决。我在错误中添加了一些解释:https://bugzilla.mozilla.org/show_bug.cgi?id=1174425#c2但简而言之,您可以尝试添加一个 setTimeout 以在显示面板时延迟一点,以避免出现与窗口焦点的竞争情况。像这样的东西:

const { setTimeout } = require("sdk/timers");

/* ... your code here ... */

function handleChange(state) {
if (state.checked) {
setTimeout(() => panel.show({ position: button }), 100);
}
}

关于firefox-addon - 带有多个窗口的空白 Firefox 插件面板页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733056/

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