質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firefox WebExtensions

Firefox WebExtensionsは、Firefox向けアドオンをクロスブラウザで開発するためのAPIおよび技術。Google Chrome/Operaでサポートされているextension API との互換性を持ちます。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

Q&A

解決済

2回答

536閲覧

Firefox WebExtensionsのサイドバー開閉の実装について

BOLSTUMP

総合スコア13

Firefox WebExtensions

Firefox WebExtensionsは、Firefox向けアドオンをクロスブラウザで開発するためのAPIおよび技術。Google Chrome/Operaでサポートされているextension API との互換性を持ちます。

Firefox

Mozilla Foundationによって作られた無料、オープンソース、クロスプラットフォームなウェブブラウザ

0グッド

0クリップ

投稿2017/12/10 10:03

編集2017/12/11 15:06

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)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

サイドバーの状態を得るFunctionなどが無く

直接サイドバーの状態を得ることは出来ませんが、拡張内で開かれているページを取得する事で対応できる可能性があります。

具体的には、
background.js:

JavaScript

1chrome.browserAction.onClicked.addListener(()=>{ 2 if(browser.extension.getViews().length === 2) { 3 browser.sidebarAction.close(); 4 } else { 5 browser.sidebarAction.open(); 6 } 7});

拡張が複数動いている場合など、考慮すべき点はあると思いますので、
あくまで参考程度です。

投稿2017/12/23 11:58

編集2017/12/23 11:59
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BOLSTUMP

2017/12/24 07:38

回答ありがとうございます! しかしすみません・・・ほぼ同じタイミングで解決方法を見つけてしまったのです。 以下のページです。 https://qiita.com/piroor/items/79b688abdf9894cee28f しかし示された物を使ったらまた別の方法で解決できたのかもしれません。 そういった方法でページを取得することが出来るのも知りませんでした。参考にさせて頂きます。
guest

0

自己解決

こちらのページに解決方法が示されていました。
https://qiita.com/piroor/items/79b688abdf9894cee28f

browser.runtime.connect()を使ってサイドバーとbackgroundで接続をすることで、サイドバーの状態を把握する方法です。
関わっていただいた皆様ありがとうございました。

投稿2017/12/24 07:42

BOLSTUMP

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問