gpt4 book ai didi

javascript - Firefox Addon Pagemod 未针对 youtube 执行

转载 作者:行者123 更新时间:2023-11-29 18:08:44 28 4
gpt4 key购买 nike

我正在构建一个与 youtube 网站交互的小型插件。为了在页面内注入(inject)自定义脚本,我使用方便的 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);
}
});

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

我访问的 url 是有序的:

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

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

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

当我搜索时,我找到了 this article on page-mod's attachTo这可能是一个解决方案,但是带有 attachTo: ["existing", "top"] 行的事件,结果是一样的......

你有什么想法吗?

谢谢

最佳答案

在查看另一个 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 网站上也得到了注入(inject)

希望对你有帮助:)

关于javascript - Firefox Addon Pagemod 未针对 youtube 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29408140/

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