【发布时间】:2013-01-09 00:40:25
【问题描述】:
OS X 10.8.2。我有一个 webView,我一直在其中加载 HTML 文档。 (一次一个,响应用户输入。)
我正在使用 WebScriptObjects,以便当用户单击每个 HTML 文档中的菜单元素时,我的代码会收到通知。然后,我可以在内存中创建一些特定于上下文的文档,并将其返回给用户,方法是在 webView 的 mainFrame 上调用 loadHTMLString:baseURL。
(顺便说一句:这项工作的第二个原因是修改 HTML 文档,以强制 WebKit 更新页面和链接的 javascript 文件;WebKit 会积极缓存和重用 javascript,而对链接的 JS 的更改不会反映在 WebView 中。为了解决这个问题,我在运行中重写了 javascript 包含,为它加上时间戳,以强制 WebKit 重新包含它。非常乏味。有人知道 WebKit 在这方面是否有所改进?)
在 Mountain Lion 之前,代码可以像宣传的那样工作,没有错误。
在Mountain Lion上跑步,发生了两次断裂:
1) 从 NSURL 获取 absoluteString 时会包含片段。即字符串“#someAnchor”附加到字符串的末尾。改用path 方法修复。
2) 后续加载在 webFrame 中不再起作用。具体来说...我可以使用 loadRequest 或 loadHTMLString:baseURL: 将一个页面(例如 page1.html)加载到 webFrame 中。收到的委托回调是:
webView:didStartProvisionalLoadForFrame:
接着……
webView:didFinishLoadForFrame:
大获成功。
问题:
但是,在单击通常会通过 WebScriptObjects 导致新页面加载(例如 page2.html)的 HTML 元素后,我得到了这些回调:
webView:didStartProvisionalLoadForFrame:
还有……
webView:didFailProvisionalLoadWithError:forFrame:
错误代码是 999 (NSURLErrorCancelled)
一项小研究表明,这是一个非常常见的错误,尤其是在 iOS 世界中。通常,您只是忽略它。但是,我不能忽略它,因为我的页面加载已损坏。无论初始页面加载和下一页加载尝试之间的时间长度如何,都会发生此错误。初始页面已完全加载(如 webView:didFinishLoadForFrame: 回调所示。)
我曾尝试在加载页面之前调用 stopLoading,但没有效果。
谁能提供建议?谢谢。
【问题讨论】: