为什么我的附加panel's内容脚本不再响应端口信息变化的contentURL后?(Why

2019-10-22 05:41发布

我使用的插件-SDK构建Firefox插件。

该插件在显示上点击面板一个键。 该面板具有运行其内容的脚本。 现在,我需要的面板看起来不同,这取决于用户的当前选项卡上,有时显示外部网址。

因此,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。

这是一些很奇怪的行为...有我遇到了一个错误?

Answer 1:

至于我能告诉面板上有,我可以听用于发射的消息各种各样的没有“准备好了”的事件。

我认为它在内部至少它似乎,但我不知道他们是否会暴露出来。

但是,即使它并不可以简单地从内容脚本解雇自己的端口消息一旦被连接,并注册了自己的听众。 当在插件接收消息,然后你可以继续使用该侧的端口。



文章来源: Why is my add-on panel´s content script no longer responding to port messages after changing contentUrl?