用于位置更改的Cocoa WebKit / WebView委托? (用户点击链接,javascript动作等)

时间:2011-10-15 14:36:36

标签: cocoa webkit webview

我已经在Cocoa应用程序中添加了一个WebView,并且我试图找出哪个代理可用于检测导航更改的时间(用户单击链接,或者javascript触发以更改位置等)。

WebView class reference包含四个代理(WebFrameLoadDelegate协议参考,WebPolicyDelegate协议参考,WebResourceLoadDelegate协议参考和WebUIDelegate协议参考),我已经查看了其中的每一个,但我似乎无法找到如何检测这一点。我错过了一些明显的或者没有办法得到这个吗?

tldr - 尝试弄清楚如何在WebView更改URL时设置委托来获取事件。 (具体来说,我需要知道新的URL是什么)。

3 个答案:

答案 0 :(得分:9)

使用WebKit(即MacOS X),跟踪请求的最佳位置可能是webView:identifierForInitialRequest:fromDataSource:,尽管webView:resource:willSendRequest:redirectResponse:fromDataSource:也很好,并且具有允许您修改请求的优势。

与iOS一样,您可以使用[request URL]

通过[webView setResourceLoadDelegate:self];设置此内容。

在我看来,资源加载委托(如上所述)提供了更好的选项来处理请求,而不是策略委托方法。

答案 1 :(得分:5)

我建议您实现这两个WebPolicyDelegate方法:

-webView:decidePolicyForNavigationAction:request:frame:decisionListener:
-webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:

这将告诉您导航到的新URL,但也让您有机会更改默认行为。例如你可能没有WebKit尝试打开新窗口。

答案 2 :(得分:-1)

实施

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    return YES;
}

并测试正文中的导航类型。您的类需要设置为Web视图的委托,并实现UIWebViewDelegate协议。可以从请求中获取URL:

[request URL]