2011-10-15 19 views
6

我已经添加了一个WebView到Cocoa应用程序,我试图找出哪些委托我可以用来检测导航更改(用户单击链接或JavaScript触发更改位置等)。Cocoa WebKit/WebView代理位置更改? (用户点击链接,JavaScript动作等)

WebView class reference包含四个代表(WebFrameLoadDelegate协议参考,WebPolicyDelegate协议参考,WebResourceLoadDelegate协议参考和WebUIDelegate协议参考)和我都互相看着这些,但我似乎无法找到如何检测这一点。我是否错过了明显的明显或者没有办法得到这个?

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

回答

9

使用的WebKit(即MacOS X系统),则可能追踪请求最好的地方是在webView:identifierForInitialRequest:fromDataSource:,虽然webView:resource:willSendRequest:redirectResponse:fromDataSource:也不错,并有让你修改的优势请求。

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

请通过[webView setResourceLoadDelegate:self];进行设置。

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

-1

实施

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

和测试主体内的导航类型。您的课程需要设置为Web视图的代理,并实施UIWebViewDelegate协议。该URL可以从索取:

[request URL] 
+3

谢谢,但这个Mac开发使用WebView类而不是iOS UIWebView类。 – Kyle

+0

离开这个(对于这种情况是不正确的)答案,因为iOS程序员可能会在这里得到这个确切的问题。 –

5

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

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

,将告诉你在航行到新的URL,也给你一个机会来改变默认的行为。例如你可能不会试图打开新窗口的WebKit。