Firefox Addon Pagemod没有为youtube执行

时间:2015-04-02 08:16:10

标签: javascript firefox firefox-addon-sdk

我正在构建一个与youtube网站互动的小插件。 为了在页面中注入自定义脚本,我使用方便的page-mod,如下所示:

var pageMod = require("sdk/page-mod");

pageMod.PageMod({
  include: "*",
  contentScript: "window.alert('injected');",
  contentScriptWhen : 'start',
  attachTo: ["existing", "top"],
  onAttach: function(worker) {
    console.log(worker.tab.url);
  }
});

当我浏览页面时,每次加载新页面时都会显示“已注入”消息。但是当涉及到youtube时,我没有得到任何结果。

我访问过的网址是有序的:

  • https://www.google.com - > injected
  • https://www.google.com/?q=youtube - > injected
  • https://www.youtube.com - > injected
  • https://www.youtube.com/watch?v=lnUeovQ68Tw - >没什么
  • https://www.youtube.com/results?search_query=dark+side+of+the+moon - >没什么
  • 现在,如果我留在Youtube,我永远不会收到injected消息......

我注意到,当从视频更改为视频时,网址会发生变化,但网页似乎没有重新加载...

当我手动重新加载视频时,我能够在youtube视频上收到injected消息(cmd+rf5)。

在我搜索时,我发现this article on page-mod's attachTo可能是一个解决方案,但是attachTo: ["existing", "top"]行的事件,结果是相同的......

你有什么想法吗?

由于

2 个答案:

答案 0 :(得分:3)

在查看另一个firefox扩展库时,我找到了一个问题的解决方案:

  

background.js

pageMod.PageMod({
  include : youtubeRegex,
  contentScriptFile : 'permanent.js',
  onAttach : function(worker){
    worker.port.on('update', function(){
      console.log('update from contentscript');
      worker.port.emit('include'); // call the script update
    });
  },
  contentScriptWhen : 'start',
});
  

permanent.js

// 1st line of the file
self.port.emit("update");

// stuff called once
// ...

// stuff called on each udpate
self.port.on('include', function(){
  window.alert('injected');
});

这样我甚至可以在YouTube网站上获得injected

希望它会有所帮助:)

答案 1 :(得分:1)

YouTube使用JS更改其网站的内容。我不确定当youtube更改位置时是否有任何事件被触发。我知道的唯一事件是popstate,只要用户使用后退或前进按钮导航,就会触发(参见https://developer.mozilla.org/en-US/docs/Web/Events/popstate)。