1

アプリ用のクロム拡張機能を作成しました。ナビゲーションバーに配置された「拡張アイコン」のCLICKイベントで「jsファイル」からMETHODを呼び出すところ。このために、app.js (アイコンのクリック時に呼び出される METHOD を含むファイル) と background.html (この html に含まれる js ファイルを使用) の間でメッセージの受け渡しを使用します。メッセージを渡すために使用されるスクリプトは次のとおりです:(background.html から)

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.tabs.sendMessage(tab.id, "showPopup");
});

そしてメッセージを聞く:(app.jsで)

chrome.extension.onMessage.addListener(function(request) {
   if (request === "showPopup") {
      showPopup();
   }
});

クリック イベントは期待どおりに機能します。しかし、今は mozilla 拡張機能で同じことをしたいと思っています。また、アイコンをクリックしたときに app.js にメッセージを渡すことができないため、含まれているメソッドを実行できます。

pageMod を使用して app.js も追加しました。

exports.main = function(options, callbacks) {
  pageMod.PageMod({
    include: ["*"],
    contentScriptWhen: 'start',
    contentScriptFile: [data.url('jquery-1.7.1.min.js'),data.url('app.js')]      
  });
  createAndAddNavBarButton();   
};

function createAndAddNavBarButton() {
   var navBar = document.getElementById('nav-bar');//assume document has been defined
   if (!navBar){return;};       
   var nbBtn = document.createElement('navbaricon');    
       nbBtn.setAttribute('id', 'navButton');
       nbBtn.setAttribute('image', data.url('icon_16.png'));        
       nbBtn.onclick = function(){
           showPopup();                    
           return true;
       }    
   navBar.appendChild(btn);
}

しかし、クリック イベントは何もせず、showPopup() は定義されていません。新しいページが app.js で関連付けられたイベントを読み込むと、エラーなしで実行されますが、クリック イベントは機能しません。

クロム拡張の場合に行ったように、クリックイベントをこのアイコンに直接割り当てることができる方法はありますか?

4

2 に答える 2

1

多くのアドオンは、Erik Vold によるこのサードパーティ モジュールを使用しています。

https://github.com/erikvold/toolbarbutton-jplib/

将来的には、アドオン開発者が使用できるように、同様のウィジェットを Firefox に追加する予定です。

于 2012-10-12T03:34:17.283 に答える
0

メッセージパッシングにより、app.jsスクリプトにメッセージを送信できました。メッセージパッシングのスコープ内にapp.jsファイルを追加して、JavaScriptと通信できるようにするだけです。

nbBtn.addEventListener('click', function() {
   var workers = tabs.activeTab.attach({                    
       contentScriptFile: [ data.url("jquery-1.7.1.min.js"), data.url("app.js")]
   });
   workers.postMessage("doABC");
}, false) 

 navBar.appendChild(nbBtn);

これで、app.jsでこのメッセージを受信し、ポップアップを表示できます

于 2012-10-18T13:02:40.397 に答える