0

特定の時間間隔の後にページを更新するクロム拡張機能を作成しています。正常に動作しましたが、新しい問題が発生しました。ページが更新されるたびに、タブが強調表示される (点滅し始める) か、フォーカスが移動します。つまり、集中しているということです。

現在、これは chrome ブラウザーの状態に応じて異なる動作をしますが、コアの問題は同じです: 1. ページが更新されるのを待っている間にユーザーがタブを別のタブに切り替えた場合 (gmail.com でメールを書いているとします)、現在のページを更新すると、メールタブに焦点が当てられなくなります(そのため、最初にウィンドウをクリックしないとメールを書き続けることができません)

  1. ユーザーが自分のワークスペースで他のアプリケーション (私のコンピューター、Outlook など) に切り替えると、更新時にクロム アイコンがタスクバーで点滅し始めます (非常に煩わしい)。

  2. ユーザーが複数の chrome ウィンドウを開いて、それぞれが更新コードを実行しているタブを持っている場合、更新時にそのウィンドウがフォーカスされます (一番上に来ます)。これは、特定の更新が発生するたびに、すべてのクロム ウィンドウに対して繰り返されます。

問題を再現する手順:

  1. 簡単な拡張機能を書く

  2. バックグラウンド ページで、次を使用して新しいタブを作成します。

    chrome.tabs.create({ url: "https://drive.google.com/", active: false})
    
  3. ループ内で、1 分ごとに、このタブを次のように更新します。

    chrome.tabs.update(tab_id, {url: "https://drive.google.com/",
                                active: false,
                                highlighted: false});
    
  4. このコードを開始したら、クロム ウィンドウを最小化するか、ワークスペースを移動して他のことに集中してください。

  5. tabs.update() が呼び出されるたびに、Chrome ウィンドウはタスク バーから最小化を解除するか、それにフォーカスを移します。

私が望むのは、ページが更新されるたびにこのフォーカスを削除することです。誰かがこれで私を助けてくれるなら、私はとても素晴らしいでしょう.

ありがとう、ウメール

編集:

私の background.js ファイルのコード

    chrome.webNavigation.onErrorOccurred.addListener(function (_errorDetails) {
    var myUrl = 'myPage.htm';
    chrome.tabs.update(_errorDetails.tabId, { url: myUrl, active: false, 
    highlighted: false, selected: false },
        function (_tabDetails) {
            chrome.windows.update(_tabDetails.windowId, { drawAttention: false });
        });
    });

Iv は、フォーカスを停止するために、関連するすべてのパラメーターを false にしようとしました。

また、myPage.htm では、ページロード時に関数 reload() が呼び出されます。

    function reloadPage() {
    //code for 10 second delay

    location.reload();  
    }

myPage.htm 自体は、「ページを読み込めません」などの数行のテキストを表示する単純なページです。

4

1 に答える 1

1

私はコードを変更し、要件に従って動作するようにしました。リロード機能を使用してページを更新する代わりに、chrome 拡張機能のメッセージ パッシング テクニックを使用して、js から background.js にメッセージ (url と tabID を含む) を送信し、関連するタブをその URL で更新しました。 .

これが完璧な解決策ではないことはわかっていますが、私にとってはうまくいったので、共有します。

于 2013-11-05T10:29:27.133 に答える