Cocoa - 防止在 WebKit 中缓存 Javascript - Safari Beta 4 错误?

Posted

技术标签:

【中文标题】Cocoa - 防止在 WebKit 中缓存 Javascript - Safari Beta 4 错误?【英文标题】:Cocoa - Prevent caching of Javascript in WebKit - Safari Beta 4 bug? 【发布时间】:2009-05-22 23:28:48 【问题描述】:

我有一个包含 WebView 的 Cocoa 应用程序。由于应用程序已安装客户群,我的目标是 10.4 SDK。 (即我不能要求 Leopard。)

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

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

(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 根本没有更新。)

任何人都可以提出解决或解决此行为的方法吗?谢谢。

【问题讨论】:

【参考方案1】:

不是解决方案,而是一种可行的解决方法:

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

【讨论】:

非常感谢您的帮助。我刚刚尝试了您的方法,但是,javascript 仍在缓存中。 :( 根据您的建议,我想出了一个解决方法。我现在不是将 index.html 文件作为 URL 加载,而是将文件的内容作为 NSString 读取。然后,我在 HTML 正在寻找“data.js”的位置修改该字符串以读取:data.js?cacheBaffler=1234; // 一些随机数,然后我在 webview 的主机上调用 loadHTMLString。这工作正常。有趣的数据点:不修改文件名,loadHTMLString 在 Tiger 和 Leopard 中都使用缓存,无论 Safari 4 Beta 是什么。非常适合浏览器测试成绩...【参考方案2】:

[刚刚关闭这个]

无论缓存标志如何,Javascript 仍在 Safari 4 final 中缓存。令人失望,尤其是考虑到这是已知问题。我强烈怀疑浏览器大战中对营销点和测试分数的需求已经超过了对正常工作代码的需求。

但是,解决方法(请参阅下面的 cmets)确实有效。

【讨论】:

以上是关于Cocoa - 防止在 WebKit 中缓存 Javascript - Safari Beta 4 错误?的主要内容,如果未能解决你的问题,请参考以下文章

防止我的 Cocoa 应用程序“恢复”?

检测 Cocoa 动画是不是正在进行(使用 BOOL)以防止同时出现多个动画

防止用户在从远程 ftp 服务器 cocoa 流式传输文件时重命名文件

如何在 Cocoa 中创建这种面板?

如何在 CSS 过渡期间防止 Webkit 文本呈现变化

如何在 CSS 过渡期间防止 Webkit 文本呈现变化