Sir*_*ens 3 macos delegates webview
我正在尝试检测何时单击WebView中的链接.我设置了委托
[_WebCont delete:self];
_WebCont.policyDelegate = self;
Run Code Online (Sandbox Code Playgroud)
和
WebPolicyDecisionListener
Run Code Online (Sandbox Code Playgroud)
我用这个作为我的倾听者:
- (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]);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我点击视图中的链接时,它从不记录任何内容.有什么帮助解决这个问题?
要实现策略监听器,您需要执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
在你的代码中的某个地方是这样的:
WebPolicyDecisionListener* listener = [[WebPolicyDecisionListener alloc] init];
// ...
[_WebCont setPolicyDelegate:listener];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2559 次 |
最近记录: |