1

我正在尝试为 LinkedIn 构建一个插件,但内容脚本在每一帧中都输出......

我的 main.js:

exports.main = function() {

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

  pageMod.PageMod({
    include: "http://www.linkedin.com/*",
    contentScriptWhen: 'ready',
    contentScript: 'alert("test")'
  });
};

通过检查框架元素,如果它是顶部框架,我可以做一个动作

if(window.frameElement === null){ alert("YEAH this is the right place!); }

但是我的内容srcipt很复杂并且使用jquery,而且这个脚本仍然将脚本放在每一帧中......

4

1 回答 1

3

更新,SDK 的 page-mod api 现在支持“attachTo”,所以你可以这样做:

var data = require("sdk/self").data;
var page = require('sdk/page-mod');

page.PageMod({
     match:['*'],
     contentScriptOptions: {},
     contentScriptFile: [data.url('myScript.js')],
     attachTo: 'top',
     onAttach: function(worker) {
         //set up hooks or other background behavior
     },
});

有关更多信息,请参阅此更新的问题。

您可以研究两种方法:

1. 使用标签模块附加您的内容脚本。这是因为 tabs 模块只处理顶级文档。这是一个简单的例子:

https://builder.addons.mozilla.org/package/22176/latest/

2. 通过 page-mod 初始加载一个非常小的内容脚本,然后如果该页面是您真正想要修改的内容,则通过 port.emit 消息发送脚本来注入脚本。dotjs 插件中有一个此类方案的示例:

https://github.com/rlr/dotjs-addon

于 2012-08-17T21:32:27.843 回答