5

状況: このような通常のスクリプト タグを持つ単純な HTML ページがあります。

<script src="main.js"></script>

html を読み込んだ後、 main.js を更新し、リロードします (UI ボタン​​を介して)。

問題新しい JS が取得されていません。アプリケーションを閉じて、もう一度開く必要があります。

私が試したこと: - webEngine.reload() を使用していませんが、 webEngine.load() - リロードが発生するたびに新しいブラウザを作成します。-新しいブラウザで新しいステージを作成する -すべてのノードのキャッシュをオフに設定する -コードに続く HTML 内

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

-InetAddressCachePolicy:

InetAddressCachePolicy.setNegativeIfNotSet(InetAddressCachePolicy.NEVER);

-VM オプション: -Dnetworkaddress.cache.ttl=0。

質問 更新するたびに JS ファイル名に数字を追加する以外に、キャッシュを削除したり、WebView にすべてのリソースをリロードさせる方法はありますか?

注: NetBeans 7.3 と最後の Java (更新 22) を使用します。

4

6 に答える 6

0

私はそれをどのように回避したか:

  • HTML ファイルとすべての JS ファイルを含むターゲット ディレクトリを、ランダムに生成されたフォルダーにコピーします。
  • 再読み込みごとに新しいフォルダーを生成し、内容をコピーし、古いフォルダーを削除し、新しいフォルダーから読み込みます。

「mcdonasm」からの答えは、私が試したものの1つでした。「main.js」がJavaScriptのみの場合は機能しますが、他のJSファイルを参照している場合(私の場合)、他のものはキャッシュされます。

于 2013-09-13T10:47:48.967 に答える
0

同様の要件がありましたが、ディレクトリの場所を固定したかったのです。これは私のために働いた:

first = true;
final WebView view = new WebView();
view.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {

    @Override
    public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State t1) {
        System.out.println(t1);
        if(t1.equals(State.SUCCEEDED) && first) {
            first = false;
            view.getEngine().reload();
        }
    }
});

基本的に一度リロードを強制すると、外部データも更新されます。

于 2015-01-26T14:33:29.030 に答える