gpt4 book ai didi

javascript - 为什么更改 contentUrl 后我的附加面板的内容脚本不再响应端口消息?

转载 作者:行者123 更新时间:2023-11-28 00:31:23 26 4
gpt4 key购买 nike

我正在使用 addon-sdk 构建 Firefox 插件。

该插件有一个按钮,单击后会显示一个面板。该面板有一个运行它的内容脚本。现在,我需要面板根据用户当前的选项卡看起来有所不同,并且偶尔显示外部 URL。

因此,main.js 脚本跟踪用户的当前选项卡,并使用 panel.port.emit() 向内容脚本发送消息,内容脚本更改面板的 HTML 以匹配所需的内容。

但是,正如我所提到的,有时面板仅显示外部 url,因此我需要将其重置回原始 url。这是我的代码:

function panelListMode(currentTab, data){

panel.resize(350,300);

//This is the line causing the trouble
panel.contentURL = self.data.url("panel.html");

console.log("sending message");
panel.port.emit("generateList",data);
}

如果我在更改 contentURL 后发出消息,内容脚本似乎不会收到任何内容。现在,该特定行是导致问题的原因,因为如果我对其进行评论,内容脚本就会收到消息。

有件事告诉我这是因为面板需要再次加载 DOM,并且我需要等到它准备好之后内容脚本才能执行任何操作。但是...内容脚本不是与刚刚包含的脚本不同吗?

据我所知,面板没有任何可以监听以发出消息的“就绪”事件。

我错过了什么?

编辑:经过一些实验,我已经找到了更多。如果我将 panel.html 复制到与 panel2.html 相同的目录并更改我的函数,这样就可以了:

function panelListMode(currentTab, data){

panel.resize(350,300);

//This is the line causing the trouble
panel.contentURL = self.data.url("panel2.html");

console.log("sending message");
panel.port.emit("generateList",data);
}

问题已经解决了。我进行了一些实验,似乎当我尝试将 contentURL 更改为面板中已设置的 html 时,内容脚本将停止工作。

这是一些非常奇怪的行为......我遇到了错误吗?

最佳答案

As far as I am able to tell the panel has no "ready" event of sorts that I can listen to for emitting the message.

我认为确实如此,至少在内部看来是这样,但我不确定它们是否暴露了。

但即使没有,一旦附加并注册了自己的监听器,您就可以从内容脚本中简单地触发您自己的端口消息。在插件中收到该消息后,您可以恢复使用该侧的端口。

关于javascript - 为什么更改 contentUrl 后我的附加面板的内容脚本不再响应端口消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28953220/

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