2009-05-22 7 views
4

私はWebViewを含むCocoaアプリを持っています。私は10.4 SDKをターゲットにしています。 (つまり、私はLeopardを要求できません)Cocoa - WebKit - Safari Beta 4のバグでJavascriptのキャッシュを防止しますか?

私はindex.htmlとdata.jsという2つのファイルを持っています。

実行時に、ユーザーの入力に応答して、私はdata.jsファイルを上書きし、しばしばアプリケーションから現在のデータを入力します。

(data.jsファイルはindex.htmlの内のテーブルを移入する体の負荷にindex.htmlファイルによって使用される。自体をindex.htmlに変更されない。)

(おそらく)を防止するために私OFT-変化するデータのWebKitのキャッシングは、私が呼ん:

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:indexFileURL cachePolicy: NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 

[[myWebView mainFrame] loadRequest: urlRequest]; 

これはタイガーとヒョウに非常に適しています。

ただし、Safari Beta 4がインストールされている場合はLeopardで失敗します。 webview内のindex.htmlファイルの描画は、data.jsファイルの現在の変更を考慮しません。 URLのキャッシュポリシーに関係なく、javascriptファイル(data.js)が実際にキャッシュされているようです。

回避策として、loadRequestの後に[[myWebView mainFrame] reload]を呼び出すことを試みましたが、これは他の問題を引き起こします。 (Webビューはまったく更新されません)

誰でもこの問題を修正したり回避する方法を提案できますか?ありがとう。

答えて

4

ない解決策が、うまくいくかもしれない回避策:

は異なる乱数リロードするたびに、あなたのURLに「?バージョン= some_random_number」のようなものを追加してみます。私の経験では、Webkitを強制的にリロードするのに有効です。

+0

ご協力いただきありがとうございます。私はちょうどあなたのアプローチを試みたが、うわー、JavaScriptはまだキャッシュされています。 :( – SirRatty

+0

あなたのアドバイスに基づいて回避策を考え出しました。 URLとしてindex.htmlファイルを読み込むのではなく、ファイルの内容をNSStringとして読み込んでいます。 HTMLを読み込むための「data.js」を探しているポイントで:?。 data.js = 1234 cacheBaffler; //いくつかの乱数 私は、その後のWebViewのメインフレーム上でloadHTMLStringを呼び出す これは正常に動作します興味深いです。データポイント:ファイル名の変更なしで、loadHTMLStringはSafari 4 Betaに関係なく、TigerとLeopardの両方でキャッシュを使用します。ブラウザテストのスコアには最適です... – SirRatty

+0

うれしいです:) –

2

[この1つだけを閉鎖]

Javascriptがまだかかわらず、キャッシュフラグの、Safariの4最終的にキャッシュされています。特にこれが既知の問題であるとすれば、失望している。私は、ブラウザ戦争でのマーケティングドットポイントとテストスコアの必要性が、適切に動作するコードの必要性から勝ち抜いたと強く思っています。

ただし、回避策(下記のコメントを参照)が機能します。

関連する問題