如何在Cocoa WebView中识别用户发起的请求?

时间:2012-02-08 21:33:00

标签: macos cocoa webkit

我有一个基于WebKit的应用程序。当用户启动打开新页面的操作(例如单击链接)时,我想截取该URL并选择在我的应用程序中打开它,或者将其踢到Safari。

理想情况下,我想识别加载序列中的第一个请求,或者直接由用户操作产生的请求。或者,如果我可以识别帧中顶级URL的更改,可能就足够了,如果我决定将其反弹到Safari,我需要能够取消请求。

我已经实现了webView:decisionPolicyForNavigationAction:request:frame:decisionListener,我可以看到在加载页面期间发出的所有请求。用户触发的请求,以及由Javascript,REST调用启动的请求,都是这样的。

对于简单链接,我可以从操作信息中获取WebActionNavigationType。但是,如果用户使用Javascript onclick()处理程序单击某个元素,而该处理程序又导航到另一个页面,则导航类型将为“其他”,并且与所有其他Javascript请求(即原始的二次REST调用)无法区分请求)。

还有其他人解决了这个问题吗?有什么指针吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我想出了一些似乎对我有用的东西。在decisionPolicyForNavigationAction中,此测试将确定它是否是用户启动的操作:

BOOL isUserAction = (
    [frame isEqual:[sender mainFrame]] &&
    [[request URL] isEqualTo:[actionInformation objectForKey:WebActionOriginalURLKey]]
);