Javascript 为什么我的附加面板&xB4;更改contentUrl后,s的内容脚本不再响应端口消息?

Javascript 为什么我的附加面板&xB4;更改contentUrl后,s的内容脚本不再响应端口消息?,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我正在使用插件sdk构建Firefox插件 该加载项有一个按钮,单击时显示面板。该面板有一个运行它的内容脚本。现在,我需要根据用户的当前选项卡使面板看起来有所不同,并偶尔显示一个外部url 因此,main.js脚本跟踪用户的当前选项卡,并使用panel.port.emit()向内容脚本发送消息,内容脚本更改面板的HTML以匹配所需内容 但是,正如我所提到的,有时候面板只是显示一个外部url,所以我需要将其重置回其原始url。这是我的代码: function panelListMode(curre

我正在使用插件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时,内容脚本停止工作

这真是奇怪的行为。。。我遇到错误了吗

据我所知,该小组没有“准备就绪”的事件,我可以听到发出信息的种类

我想是的,至少在内部看起来是这样,但我不确定他们是否暴露在外


但是,即使没有,您也可以在内容脚本附加并注册了自己的侦听器后,从内容脚本触发自己的端口消息。在插件中收到该消息后,您可以继续使用该端的端口。

。至于你的解决方案,这是个好主意。我要试一试。您知道更改contentUrl是否会删除内容脚本吗?我需要再添加一次吗?我认为更改URL只会在新页面上重新运行内容脚本我也很难,所以我在内容脚本的开头添加了一个console.log(),以查看它何时运行。。。在改变内容后并没有看到任何奇怪和出乎意料的东西,但也许你们可以在面板上附加一个新的,我已经试验并发现了一些关于何时发生这种情况的细节。见我的编辑上面。这是一种非常奇怪的行为。我遇到错误了吗?