Cocoa WebKit - Mountain Lion - loadRequest,loadHTMLString:baseURL: - 加载错误

时间:2013-01-25 04:13:21

标签: cocoa webview webkit

OS X 10.8.2。我有一个webView,我一直在加载HTML文档。 (一次一个,响应用户输入。)

我正在使用WebScriptObjects,以便当用户点击每个HTML文档中的菜单元素时,会通知我的代码。然后,我可以在内存中创建一些特定于上下文的文档,并通过在webView的mainFrame上调用loadHTMLString:baseURL将其提供给用户。

(旁白:这项工作的第二个原因是修改HTML文档,以强制WebKit更新页面和链接的javascript文件; WebKit会积极地缓存并重用javascript,并且对链接JS的更改不是为了解决这个问题,我在运行时重写了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点击通常会导致新页面加载的HTML元素(例如page2.html)后,我得到了这些回调:

webView:didStartProvisionalLoadForFrame:

和...

webView:didFailProvisionalLoadWithError:forFrame:

错误代码为999(NSURLErrorCancelled)

一项小小的研究表明,这是一个非常常见的错误,特别是在iOS世界中。通常,你只是忽略它。但是,我不能忽略它,因为我的页面加载被破坏了。无论初始页面加载和下一页加载尝试之间的时间长度如何,都会发生此错误。初始页面已完全加载(如webView:didFinishLoadForFrame:回调所示。)

我在加载页面之前尝试过调用stopLoading,但没有效果。

有人可以提供建议吗?谢谢。

1 个答案:

答案 0 :(得分:0)

解决此问题:我现在不是试图立即加载下一页,而是在不久的将来使用以下方式安排它:

performSelector: @selector(doScheduledPageChange)
            withObject: nil
            afterDelay: 0.01];

这很有效。