我有一个包含WebView的Cocoa应用程序。由于应用程序已安装客户群,我的目标是10.4 SDK。 (即我不能要求Leopard。)
我有两个文件:index.html和data.js。
在运行时,为了响应用户输入,我通常会使用应用程序中的当前数据填充data.js文件。
(data.html上的index.html文件使用data.js文件来填充index.html中的表.index.html本身不会被修改。)
为了(据说)阻止WebKit缓存我经常更改的数据,我打电话给:
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:indexFileURL cachePolicy: NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
和
[[myWebView mainFrame] loadRequest: urlRequest];
这在Tiger和Leopard中非常有效。
但是,如果安装了Safari Beta 4,它在Leopard中会失败。 webview中index.html文件的绘制不考虑data.js文件的当前更改。无论URL的缓存策略如何,javascript文件(data.js)实际上都被缓存了。
作为一种解决方法,我在loadRequest之后尝试调用[[myWebView mainFrame] reload],但这会导致其他问题。 (webview根本没有更新。)
有人可以提出修复或解决此问题的方法吗?感谢。
答案 0 :(得分:4)
不是解决方案,而是可能有效的解决方法:
尝试在您的网址中添加类似“?version = some_random_number”的内容,每次重新加载时都会使用不同的随机数。根据我的经验,这在强制webkit重新加载方面非常有效。
答案 1 :(得分:2)
[关闭这一个]
无论缓存标志如何,Javascript仍在Safari 4 final中缓存。令人失望,特别是考虑到这是已知的问题。我强烈怀疑在浏览器大战中营销点和测试分数的需求已经超过了对正确工作代码的需求。
但是,解决方法(参见下面的注释)确实有效。