1

ブラウザのアドレスバーから直接TYPO3CMSキャッシュをクリアするChrome拡張機能を作成しました。

次に、ページの更新時にキャッシュを自動的にクリアするオプション機能を追加したいと思います。つまり、ユーザーがF5、CTRL + Rを押すか、ツールバーのリロードアイコンをクリックするか、コンテキストメニューをクリックして[リロード]すると、最初にajaxスクリプトを実行して(CMSキャッシュをクリアするため)、その後、ページが実行される可能性があります。リロードされます。

Chrome APIでそれを行う可能性はありますか?

最初にコンテンツスクリプトでイベントを試しましたwindow.onbeforeupdate。これは、ページがリロードされているときだけでなく、ウィンドウを閉じたり、別のWebサイトに切り替えたりした場合にも常にトリガーされます。さらに、ここでajaxリクエストを待つようにブラウザに指示することはできません。

document.onkeydown動作するのは、キー116(F5)と82(R)をコントロールキーでチェックして使用することevent.preventDefault()です。ただし、これでは、キャッシュを更新するために考えられる他の2つのケースについては説明しません。

ありがとう!

4

1 に答える 1

1

私は解決策を見つけました。それは私の要件に実際には一致しませんが、それは機能します(さらに良いです)。

Chromeは、すべてのhttpリクエストを変更またはブロックできるwebRequestAPIを提供します。

chrome.webRequest.onBeforeRequest.addListener(
  function (details) {
    if (!severalConditionsToCheckIfIWantToDoTheMagic) {
        return;
    }

    $.ajax(url, {
        async:false,
        complete:function () {
          return {redirectUrl:details.url};
        }
    });
  },
  {urls:["<all_urls>"]},
  ["blocking"]
);

この例では、最初にajaxリクエストを実行するかどうかを確認します。はいの場合、次のステップはajaxリクエストを実行しないことです。リクエストが非同期ではないことが重要です。完了すると、リクエストの元のURLを返します。これは、基本的にはリロードです。

それが私の要件に実際に一致しない理由は、リロード時だけでなく、要求に応じて常にトリガーされるためです。つまり、私の状態では、次のことを確認する必要があります。

  • 他のウェブサイト
  • 他のリクエストタイプ(css、js、または画像の読み込みもリクエストです)、タイプ「main_frame」が必要です
  • 私の拡張機能に属するいくつかの変数

これで、Webサイトにあるリンクをクリックしたときにもスクリプトがトリガーされますが、私の場合はこれで問題ありません。

于 2012-11-21T10:26:44.680 に答える