2012-12-09 132 views
2

我试图检测当我点击WebView中的链接。 我设定检测链接被点击时WebView(Mac)

[_WebCont delete:self]; 
_WebCont.policyDelegate = self; 

WebPolicyDecisionListener 

委托我用这个作为我的听众:

- (void)_WebCont:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener { 
    NSString *url = request.URL.absoluteString; 
    url = [NSString stringWithFormat:@"*load %@",url]; 
    [self sendMessage:url]; 
    NSLog([NSString stringWithFormat:@"Click: %@",url]); 

} 

但是当过我点击视图中的链接它从来没有记录任何东西。 任何帮助解决这个问题?

回答

6

要落实政策监听器,你需要做到这一点:

WebPolicyDecisionListener.h:

// ... 
@interface WebPolicyDecisionListener: NSObject { 
// ... 
} 


// Implement PolicyDelegate 
-(void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation 
                  request:(NSURLRequest *)request 
                  frame:(WebFrame *)frame 
               decisionListener:(id<WebPolicyDecisionListener>)listener; 

-(void)webView:(WebView *)webView decidePolicyForNewWindowAction:(NSDictionary *)actionInformation 
                 request:(NSURLRequest *)request 
                newFrameName:(NSString *)frameName 
               decisionListener:(id <WebPolicyDecisionListener>)listener; 
// ... 
@end 

WebPolicyDecisionListener.m

@implementation WebPolicyDecisionListener 
// ... 
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation 
                  request:(NSURLRequest *)request 
                  frame:(WebFrame *)frame 
                decisionListener:(id<WebPolicyDecisionListener>)listener 
{ 
    if (WebNavigationTypeLinkClicked == [[actionInformation objectForKey:WebActionNavigationTypeKey] intValue]) 
    { 
    // link was clicked do something with it... 
    } 
    [listener use]; // Say for webview to do it work... 
} 


-(void)webView:(WebView *)webView decidePolicyForNewWindowAction:(NSDictionary *)actionInformation 
                 request:(NSURLRequest *)request 
                newFrameName:(NSString *)frameName 
               decisionListener:(id <WebPolicyDecisionListener>)listener 
{ 
    if (WebNavigationTypeLinkClicked == [[actionInformation objectForKey:WebActionNavigationTypeKey] intValue]) 
    { 
    // link was clicked and webview want to open it in new window do something with it... 
    } 
    [listener ignore]; // ignore webview default implementation... 
} 
// ... 
@end 

和地方在你的代码是这样的:

WebPolicyDecisionListener* listener = [[WebPolicyDecisionListener alloc] init]; 
// ... 
[_WebCont setPolicyDelegate:listener]; 
+0

所以我应该添加thr方法? – Sirens