我已经在Cocoa应用程序中添加了一个WebView,并且我试图找出哪个代理可用于检测导航更改的时间(用户单击链接,或者javascript触发以更改位置等)。
WebView class reference包含四个代理(WebFrameLoadDelegate协议参考,WebPolicyDelegate协议参考,WebResourceLoadDelegate协议参考和WebUIDelegate协议参考),我已经查看了其中的每一个,但我似乎无法找到如何检测这一点。我错过了一些明显的或者没有办法得到这个吗?
tldr - 尝试弄清楚如何在WebView更改URL时设置委托来获取事件。 (具体来说,我需要知道新的URL是什么)。
答案 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]