2012-12-09 133 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