4

WebView のリンクをクリックしたことを検出しようとしています。デリゲートを設定しました

[_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]);

}

しかし、ビュー内のリンクをクリックしても、何もログに記録されません。これを修正するための助けはありますか?

4

1 に答える 1

8

ポリシー リスナーを実装するには、次のようにする必要があります。

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];
于 2012-12-19T06:19:03.987 に答える