6

私はクロム拡張機能で遊んでいます.私のマニフェストは背景ページをロードします:

...
"background": { "scripts": ["background_page.js"], "persistent": false },
...

コードは次の.jsようになります。

var once = false;
window.addEventListener("load", function () {
  if ( once == true ) { return; }
  alert( 'test' );
  once = true;
}, false);

これはうまくいくようですがbackground_page.js、ブラウザが起動するたびにコードを1回だけ実行したいです。

現時点では理由はわかりませんが、コードが複数回実行されています。最初は、新しいタブを開くたびに実行されていると思っていましたが、そうではありません。ブラウザを起動するとアラートが表示され、すぐに新しいタブを開くとアラートは表示されませんが、約 1 分ほど待ってから新しいタブを開くと、アラートが再び表示されます。

background_page.jsブラウザが起動するたびにコードが一度だけ実行されるようにするにはどうすればよいですか?

4

3 に答える 3

19

使用しているのはイベント ページ(background_page.js) です。ページが何もしていないことをブラウザが検出すると、イベント ページはアンロードされます。つまり、新しいタブを開くと、イベント ページがリロードされ、上部から再び実行が開始されます。このようにして、Chrome はアプリのメモリ使用量を減らし、ブラウザを高速化することができます。

問題を解決したい場合はpersistent:true、ページが無期限に、またはユーザーがブラウザーを閉じるまで「持続」するように単純に使用します。アプリのメモリ効率を本当に維持したい場合はruntime.onSuspend、イベント ページがアンロードされるたびに呼び出されるメソッドを確認する必要があります。このようにして、ページがアンロードされる前に内容を保存できるため、中断したところから再開できます。

于 2013-07-13T19:33:20.360 に答える