1

LinkedInのアドオンを作成しようとしていますが、contentscriptがすべてのフレームに出力されます...

私の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

UPDATE、SDKのpage-modapiは'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
     },
});

詳細については、この最近の質問を参照してください

調査できるアプローチは2つあります。

1.タブモジュールを使用してコンテンツスクリプトを添付します。tabsモジュールはトップレベルのドキュメントのみを処理するため、これは機能します。簡単な例を次に示します。

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

2. page-modを介して非常に小さなコンテンツスクリプトの初期ロードを実行し、次にページが本当にmodしたいものである場合は、port.emitメッセージを介してスクリプトを送信してスクリプトを挿入します。dotjsアドオンからのこの種のスキームの例があります:

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

于 2012-08-17T21:32:27.843 に答える