Firefox WebExtensionsのサイドバー開閉の実装について質問させてください。
現在browserActionのボタンからサイドバーを開閉する拡張を作成しています。
sidebarActionのopenとcloseを使って可能であることは分かりました。
しかしサイドバーの状態によって動作を変えなければりませんが、サイドバーの状態を得るFunctionなどが無く、実装の方法に悩んでいます。
下記それぞれのサイドバーの状態に対して、browserActionで期待する動作です
サイドバーの状態 | 期待する動作 |
---|---|
開かれていない | 目的の拡張機能のパネルのサイドバーを開く |
目的の拡張機能のパネルのサイドバーが開かれている | サイドバーを閉じる |
他の拡張機能のパネルのサイドバーが開かれている | 目的の拡張機能のパネルのサイドバーを開く |
※追記
現在呼び出されるサイドバー内から以下の形でメッセージを送ることで実現しようとしています。
javascript
1//サイドバー内 2// サイドバーが開かれた時の処理 3window.addEventListener('DOMContentLoaded', initialize, {once: true}); 4function initialize() { 5 console.log("OPEN"); 6 browser.runtime.sendMessage({flag: true}); 7} 8 9// サイドバーが閉じられた時の処理 10window.addEventListener('unload', finalize, {once: true}); 11function finalize() { 12 console.log("CLOSE"); 13 browser.runtime.sendMessage({flag: false}); 14}
javascript
1// background側 2var sidebar_open_flag = true; //サイドバー開閉フラグ true=open false=close 3 4// サイドバーの開閉処理 5chrome.browserAction.onClicked.addListener((tab) => { 6 if(sidebar_open_flag) { 7 browser.sidebarAction.close(); 8 } else { 9 browser.sidebarAction.open(); 10 } 11}); 12// サイドバーが開かれたメッセージを受け止める 13browser.runtime.onMessage.addListener(function(request, sender, sendResponse) { 14 sidebar_open_flag = request.flag; 15});
しかしunload時にメッセージが送られない事態に陥っています。
コンソールには「CLOSE」が表示されるのでイベント自体は動いているようです。
unload時にはsendMessageが使えないなどの仕様なのでしょうか?
何とか動かす方法をご存知の方いらっしゃいましたらご教授頂けると幸いです。
よろしくお願いいたします。
※追記
以下の通りエラーメッセージが出ていました
browser.ownerGlobal is null
コンソールに様々なメッセージが出て確認用のログが埋もれてしまうのでエラー表示を切っていたので見逃していました。お恥ずかしいです。
エラーについて調べてみましたが、どういったエラーなのか分かりませんでした。
お分かりの方いらっしゃったら教えていただけると幸いです。
その他補足情報
Firefox verson 57.0.2(64bit)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/24 07:38