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

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

ただいまの
回答率

91.06%

  • Firefox

    173questions

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

  • Firefox WebExtensions

    7questions

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 290

BOLSTUMP

score 6

Firefox WebExtensionsのサイドバー開閉の実装について質問させてください。
現在browserActionのボタンからサイドバーを開閉する拡張を作成しています。
sidebarActionのopenとcloseを使って可能であることは分かりました。
しかしサイドバーの状態によって動作を変えなければりませんが、サイドバーの状態を得るFunctionなどが無く、実装の方法に悩んでいます。
下記それぞれのサイドバーの状態に対して、browserActionで期待する動作です

サイドバーの状態 期待する動作
開かれていない 目的の拡張機能のパネルのサイドバーを開く
目的の拡張機能のパネルのサイドバーが開かれている サイドバーを閉じる
他の拡張機能のパネルのサイドバーが開かれている 目的の拡張機能のパネルのサイドバーを開く

※追記
現在呼び出されるサイドバー内から以下の形でメッセージを送ることで実現しようとしています。

//サイドバー内
// サイドバーが開かれた時の処理
window.addEventListener('DOMContentLoaded', initialize, {once: true});
function initialize() {
    console.log("OPEN");
    browser.runtime.sendMessage({flag: true});
}

// サイドバーが閉じられた時の処理
window.addEventListener('unload', finalize, {once: true});
function finalize() {
    console.log("CLOSE");
    browser.runtime.sendMessage({flag: false});
}
// background側
var sidebar_open_flag = true; //サイドバー開閉フラグ true=open false=close

// サイドバーの開閉処理
chrome.browserAction.onClicked.addListener((tab) => {
    if(sidebar_open_flag) {
        browser.sidebarAction.close();
    } else {
        browser.sidebarAction.open();
    }
});
// サイドバーが開かれたメッセージを受け止める
browser.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    sidebar_open_flag = request.flag;
});


しかしunload時にメッセージが送られない事態に陥っています。
コンソールには「CLOSE」が表示されるのでイベント自体は動いているようです。

unload時にはsendMessageが使えないなどの仕様なのでしょうか?
何とか動かす方法をご存知の方いらっしゃいましたらご教授頂けると幸いです。
よろしくお願いいたします。

※追記
以下の通りエラーメッセージが出ていました

browser.ownerGlobal is null


コンソールに様々なメッセージが出て確認用のログが埋もれてしまうのでエラー表示を切っていたので見逃していました。お恥ずかしいです。
エラーについて調べてみましたが、どういったエラーなのか分かりませんでした。
お分かりの方いらっしゃったら教えていただけると幸いです。

その他補足情報

Firefox verson 57.0.2(64bit)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

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

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

具体的には、
background.js:

chrome.browserAction.onClicked.addListener(()=>{
    if(browser.extension.getViews().length === 2) {
        browser.sidebarAction.close();
    } else {
        browser.sidebarAction.open();
    }
});


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/24 16:38

    回答ありがとうございます!
    しかしすみません・・・ほぼ同じタイミングで解決方法を見つけてしまったのです。
    以下のページです。
    https://qiita.com/piroor/items/79b688abdf9894cee28f

    しかし示された物を使ったらまた別の方法で解決できたのかもしれません。
    そういった方法でページを取得することが出来るのも知りませんでした。参考にさせて頂きます。

    キャンセル

check解決した方法

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 91.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Firefox

    173questions

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

  • Firefox WebExtensions

    7questions