firefoxのWeb Extensionsのtabs APIのtips
Web Extensitons でfirefoxのアドオンを作って、詰まった諸々をメモ
https://github.com/thrakt/load-nexttab-firefox
https://github.com/thrakt/hatenabookmark-show-count-firefox
tabs
はbackgroundでしか動かない
permissions
でtabsを追加しても、background
で動かしているスクリプト配下でしかbrowser.tabs
は見えない。
未読タブを識別する方法はないっぽい
firefoxは開いたタブをセッションとして保存でき、再起動時に同じタブを開いた状態で再開できる。しかし、再開時は開いていないタブは未読み込み状態になる。これを識別する方法が見つからなかった。
一度開いたタブはcomplete
になってしまう。作ったアドオンでは、グローバル変数に実際に読み込んだタブを記録してなんとかしましたが、どうだろう……。
tabs.onCreated
は起動時に全タブで呼ばれる
tabs.onCreated
はタブの作成時に発行されるイベントですが、起動時に全タブで呼ばれます。起動時は呼ばなくていいんだけど、起動後に新しいタブを追加した時は呼びたい、みたいな時に困る。
DOMのload
イベント的な、ブラウザの起動処理が終わった後に呼ばれる物が欲しかったんだけどないっぽい。runtime.onStartup
で行けるかと思ったら、本当に起動時に呼ばれてしまうので意味がない。
挙動を見たところ、次の順で呼ばれる。
runtime.onStartup
-
tabs.onCreated
全タブ tabs.onActivated
tabs.onActivated
はタブ移動時に毎回呼ばれますが、起動時にも1度呼ばれます。なので、tabs.onActivated
で一回だけイベントリスナへの追加をすれば先述の挙動は作れる。これでとりあえず解決。
tabs.onActivated
は読み込み前に呼ばれる
tabs.onActivated
はタブの読み込み完了前に呼ばれます。タブ作成時のtab.url
はabout:blank
なので、ここに依存する処理を書くと困る。
タブの作成時の動きとして、
-
tab.url
がabout:blank
で、tab.status
がcomplete
-
tab.url
が開くURLになり、tab.status
がloading
- 読み込み完了後、
tab.status
がcomplete
になる
となる。なので、tabs.onUpdated
で呼ばれるようにして、読み込み完了後に処理するようにする。
browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
if (tab.status === 'complete' && tab.url.startsWith('http')) {
// something to do
}
});
という感じ。
Author And Source
この問題について(firefoxのWeb Extensionsのtabs APIのtips), 我々は、より多くの情報をここで見つけました https://qiita.com/thrakt/items/9144d3120823713beef6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .