私は、私用のポップアップベースの Web 拡張機能を作成しています。基本的に、複数の Web サイトで情報を確認するという繰り返しのタスクを実行します。
訪問したサイトの順序は、ポップアップによって制御されます。ページを 1 つずつ確認できるようにするために、拡張ポップアップでブラウザ ウィンドウをそのサイトに転送し、onload イベントを設定して、完全な html がロードされたら通信できるようにします。
関連する拡張コードは現在次のようになっています。
function inject(jscode)
{
browser.tabs.executeScript(null, {code: jscode});
}
...
...
...
// next_url contains the url string of the next website to be visited
// stop contains a bool to decide if more actions will happen
if( next_url != '')
{
inject("window.location.assign('" + next_url + "');")
if( !stop )
{
await new Promise(resolve => setTimeout(resolve, 5000));
inject("browser.runtime.sendMessage({action: 'getSource', source: document.documentElement.innerHTML });")
}
}
これは、Web サイトと拡張機能の間で通信が行われるように、関連するすべてのリスナーが設定されている場合に機能します。
getSource
ただし、現在のページではなく完全にロードされた次のページにアクションが適用されるように、新しい Web サイトをロードするたびにポップアップが 5 秒間スリープする必要があるのは好きではありません。これまでのところ、リダイレクトを開始し、その URL をロードするための onload-event を即座にセットアップする方法を見つけていません。
このコードをどのように改善できますか?