Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa-防止WebKit中的Javascript缓存-Safari Beta 4 bug?_Javascript_Html_Cocoa_Caching_Webkit - Fatal编程技术网

Cocoa-防止WebKit中的Javascript缓存-Safari Beta 4 bug?

Cocoa-防止WebKit中的Javascript缓存-Safari Beta 4 bug?,javascript,html,cocoa,caching,webkit,Javascript,Html,Cocoa,Caching,Webkit,我有一个包含网络视图的Cocoa应用程序。我的目标是10.4 SDK,因为该应用程序的已安装客户群。(即,我不能要求Leopard。) 我有两个文件:index.html和data.js 在运行时,为了响应用户的输入,我通常会写入data.js文件,并用应用程序中的当前数据填充它 (data.js文件在主体加载时由index.html文件用于填充index.html中的表。index.html本身不会被修改。) 为了(据说)防止WebKit缓存我经常更改的数据,我调用: NSURLRequest

我有一个包含网络视图的Cocoa应用程序。我的目标是10.4 SDK,因为该应用程序的已安装客户群。(即,我不能要求Leopard。)

我有两个文件:index.html和data.js

在运行时,为了响应用户的输入,我通常会写入data.js文件,并用应用程序中的当前数据填充它

(data.js文件在主体加载时由index.html文件用于填充index.html中的表。index.html本身不会被修改。)

为了(据说)防止WebKit缓存我经常更改的数据,我调用:

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

这在老虎和豹子中非常有效

然而,如果安装了Safari Beta 4,它在Leopard中会失败。webview中index.html文件的绘图不考虑对data.js文件的当前更改。不管URL的缓存策略如何,javascript文件(data.js)实际上都在被缓存

作为一种解决方法,我尝试在loadRequest之后调用[[myWebView mainFrame]reload],但这会导致其他问题。(网络视图根本不更新。)


有人能提出一种方法来纠正或解决这种行为吗?谢谢。

这不是一个解决方案,而是一个可行的解决方案:


请尝试在URL中添加类似“?version=some_random_number”的内容,每次重新加载时使用不同的随机数。根据我的经验,这在强制webkit重新加载时非常有效

[刚刚结束这一关]

Javascript仍然被缓存在Safari 4 final中,不管缓存标志如何。令人失望,尤其是考虑到这是一个众所周知的问题。我强烈怀疑,在浏览器大战中,市场营销点和测试分数的需求战胜了对正确工作代码的需求


不过,解决方法(请参见下面的注释)确实有效。

非常感谢您的帮助。我刚刚尝试了您的方法,但遗憾的是,javascript仍在缓存中(根据您的建议,我想出了一个解决方法。我现在不是将index.html文件作为URL加载,而是将文件内容作为NSString读取。然后在html查找“data.js”的地方修改该字符串阅读:data.js?cache挡板=1234;//然后我在webview的主机上调用某个随机数loadHTMLString。这很好。有趣的数据点:没有文件名修改,loadHTMLString在Tiger和Leopard中都使用缓存,而不管Safari 4 Beta如何。非常适合浏览器测试分数。。。
[[myWebView mainFrame] loadRequest: urlRequest];