firefoxのWeb Extensionsのtabs APIのtips

  • 0
    いいね
  • 0
    コメント

    Web Extensitons でfirefoxのアドオンを作って、詰まった諸々をメモ

    https://github.com/thrakt/load-nexttab-firefox

    tabsはbackgroundでしか動かない

    permissionsでtabsを追加しても、backgroundで動かしているスクリプト配下でしかbrowser.tabsは見えない。

    https://developer.mozilla.org/ja/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Background_scripts

    未読タブを識別する方法はないっぽい

    firefoxは開いたタブをセッションとして保存でき、再起動時に同じタブを開いた状態で再開できますが、再開時は開いていないタブは未読み込み状態になる。これを識別する方法が見つからなかった。

    https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/TabStatus

    一度開いたタブはcompleteになってしまう。作ったアドオンではグローバル変数に読み込んだタブIDを記録してなんとかしましたが、どうだろう……。

    tabs.onCreatedは起動時に全タブで呼ばれる

    https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/TabStatus

    使い方を間違えたらえらい目に合う。直にイベントリスナへ追加すると、起動時の呼び出しでも呼ばれてしまう。

    DOMのloadイベント的な、ブラウザの起動処理が終わった後に呼ばれる物が欲しかったんだけどないっぽい。runtime.onStartupで行けるかと思ったら、本当に起動時に呼ばれてしまう。

    挙動を見たところ、次の順で呼ばれる。

    • runtime.onStartup
    • tabs.onCreated 全タブ
    • tabs.onActivated

    https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs/onActivated

    これはタブ移動時に毎回呼ばれるので、最初の一回だけイベントリスナへの追加をするようにしてとりあえず解決。