6

Firefoxアドオン開発は初めてです。

Firefoxアドオンのmain.jsからcontentscript関数を呼び出す方法が必要です。

開いているすべてのWebページにcontentscriptxyz.jsを挿入しました。

ナビゲーションツールバーに配置したボタンをクリックすると、main.jsからcontentscript xyz.jsにある関数abc()を呼び出したいと思います。

以下は私のコードです。

Main.js

..
function addToolbarButton() {
    var document = mediator.getMostRecentWindow('navigator:browser').document;        
    var navBar = document.getElementById('nav-bar');
    if (!navBar) {
        return;
    }
    var btn = document.createElement('toolbarbutton');  
    btn.setAttribute('id', 'mybutton-id');
    btn.setAttribute('type', 'button');
    btn.setAttribute('class', 'toolbarbutton-1');
    btn.setAttribute('image', data.url('icon_16.png'));
    btn.setAttribute('orient', 'vertical');
        btn.setAttribute('label', 'Test');
        btn.addEventListener('click', function() {
            tabs.activeTab.attach({
            //

                abc()     //here i want to call the function present in my contentscript 

            //
        });
        }, false)
    navBar.appendChild(btn);
}

..

xyz.js

..

function abc(){
//here is my code logic
}

..

メッセージパッシングはそうする方法であるが、Firefoxでは実装できないことを知りました。

行き詰まった私を助けてください。

4

2 に答える 2

4

関数を直接呼び出すことはできません。コンテンツ スクリプトにメッセージを送信する必要があります。そのようなことを意味します:

var worker = tabs.activeTab.attach({
  ...
});

// Some time later
worker.postMessage("doABC");

コンテンツ スクリプトでは、次のようになります。

self.on("message", function(message) {
  if (message == "doABC")
    abc();
});

コンテンツ スクリプトとの通信の詳細については、ドキュメントを参照してください。

于 2012-10-04T07:35:24.320 に答える
1

ドキュメントによると、このように動作するはずです。

ただし、ActionButton からプリロードされたコンテンツ スクリプトへのアクセス がまだ解決されていないという同様の質問があります。

// main.js
function handleClick(state) {
    var myWorker = tabs.activeTab.attach({

    });   
    myWorker.port.emit("initialize", "Message from the add-on");
}

// content.js
/*BEGIN Listen events coming from Add-on script*/
self.port.on("initialize", function () {
    alert('self.port.on("initialize")');
    return;   
});
于 2014-08-12T21:23:10.233 に答える