2009-05-22 2 views
4

WebView가 포함 된 Cocoa 앱이 있습니다. 앱이 설치된 고객 기반으로 인해 10.4 SDK를 타겟팅하고 있습니다. (즉, 나는 Leopard를 요구할 수 없다.)코코아 - WebKit에서 자바 캐싱 방지 - Safari 베타 4 버그?

두 개의 파일 index.html과 data.js.

런타임에는 사용자 입력에 대한 응답으로 data.js 파일을 덮어 쓰며 종종 응용 프로그램의 현재 데이터로 채 웁니다.

가합니다 (data.js 파일이 index.html을 내부 테이블을 채우는 본체로드 index.html 파일에 의해 사용된다. 그 자체가 수정되지 index.html을).

을 위해 행 (가정) 방지 내 자주 변화하는 데이터의 웹킷 캐싱, 내가 전화 :

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

[[myWebView mainFrame] loadRequest: urlRequest]; 

이 타이거와 레오파드에서 잘 작동합니다.

그러나 Safari Beta 4가 설치된 경우 Leopard에서 오류가 발생합니다. webview 내의 index.html 파일 도면은 data.js 파일의 현재 변경 사항을 따르지 않습니다. 자바 스크립트 파일 (data.js)은 URL의 캐시 정책에 관계없이 실제로 캐싱 된 것으로 보입니다.

해결 방법으로 loadRequest 뒤에 [[myWebView mainFrame] reload]를 호출 해 보았습니다.하지만 다른 문제가 발생합니다. (웹 뷰가 전혀 업데이트되지 않습니다.)

누구든지이 문제를 해결하거나 해결할 방법을 제안 할 수 있습니까? 감사.

답변

4

아니 솔루션,하지만 작동 할 수 있습니다 해결 방법 :

다른 임의의 숫자와 함께, 귀하의 URL로 다시로드 할 때마다 "? 버전 = some_random_number"같은 것을 추가하십시오. 내 경험상, 웹킷을 강제로 재로드하는 것은 꽤 효과적입니다.

+0

도움을 많이 주셔서 감사합니다. 방금 접근 방법을 시도했지만 아아, 자바 스크립트는 여전히 캐시됩니다. : – SirRatty

+0

조언을 기반으로 해결 방법을 찾았습니다. index.html 파일을 URL로로드하는 대신 파일의 내용을 NSString으로 읽는 중입니다. 그런 다음 해당 문자열을 수정합니다. ?를 HTML 읽고 "data.js"찾고있는 시점에서 :. data.js = 1234 cacheBaffler을, 나는 다음 웹보기의 메인 프레임에 loadHTMLString를 호출 // 어떤 임의의 숫자 이 잘 작동 흥미 롭. 데이터 포인트 : 파일 이름 수정없이 loadHTMLString은 Safari 4 Beta에 관계없이 Tiger와 Leopard 모두에서 캐싱을 사용합니다 ... 브라우저 테스트 점수에 매우 좋습니다 ... – SirRatty

+0

다행 :) –

2

자바 스크립트는 여전히 관계없이 캐시 플래그, 사파리 4 마지막에 캐시되고있다 [그냥이 일을 마감]. 실망, 특히 이것은 알려진 문제입니다. 나는 브라우저 전쟁에서 점과 테스트 점수를 마케팅해야 할 필요가 제대로 작동하는 코드에 대한 필요성에서 벗어났다는 것을 강하게 의심합니다.

그러나 해결 방법 (아래 주석 참조)이 작동합니다.