Objective c 是否仅从Cocoa(OSX,而非iPhone)网络视图加载Safari中的指定链接?
我在这里找到了几篇文章,解释了如何在Safari(或默认浏览器)中打开嵌入式WebView中的所有链接,但我找不到任何关于如何在Safari中仅打开所选链接的内容,而默认情况下,这些链接将加载到WebView中。有什么想法吗?您可以在默认浏览器中加载您单击的链接 为此,您必须实现Objective c 是否仅从Cocoa(OSX,而非iPhone)网络视图加载Safari中的指定链接?,objective-c,macos,webview,Objective C,Macos,Webview,我在这里找到了几篇文章,解释了如何在Safari(或默认浏览器)中打开嵌入式WebView中的所有链接,但我找不到任何关于如何在Safari中仅打开所选链接的内容,而默认情况下,这些链接将加载到WebView中。有什么想法吗?您可以在默认浏览器中加载您单击的链接 为此,您必须实现WebPolicyDecisionListener协议,并为WebView设置policydegate: [webView setPolicyDelegate:self]; 然后执行以下方法: -(void)webVi
WebPolicyDecisionListener
协议,并为WebView
设置policydegate
:
[webView setPolicyDelegate:self];
然后执行以下方法:
-(void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener
{
if (WebNavigationTypeLinkClicked == [[actionInformation objectForKey:WebActionNavigationTypeKey] intValue])
{
[listener ignore];
NSLog(@"Opening URL in browser:%@",[request URL]);
[[NSWorkspace sharedWorkspace] openURL:[request URL]];
}
[listener use];
}
-(void)webView:(WebView *)webView decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id <WebPolicyDecisionListener>)listener
{
if (WebNavigationTypeLinkClicked == [[actionInformation objectForKey:WebActionNavigationTypeKey] intValue])
{
[listener ignore];
NSLog(@"Opening URL new window:%@",[request URL]);
[[NSWorkspace sharedWorkspace] openURL:[request URL]];
}
[listener ignore];
}
-(void)webView:(webView*)webView decisionpolicyfornavigationaction:(NSDictionary*)action信息请求:(NSURLRequest*)请求帧:(WebFrame*)帧决策侦听器:(id)侦听器
{
如果(WebNavigationTypeLinkClicked==[[actionInformation objectForKey:WebActionNavigationTypeKey]intValue])
{
[听者忽略];
NSLog(@“浏览器中的打开URL:%@,[请求URL]);
[[NSWorkspace sharedWorkspace]openURL:[请求URL]];
}
[听众使用];
}
-(void)webView:(webView*)webView DecisionPolicyFornewWindowAction:(NSDictionary*)操作信息请求:(NSURLRequest*)请求新框架名:(NSString*)框架名决策侦听器:(id)侦听器
{
如果(WebNavigationTypeLinkClicked==[[actionInformation objectForKey:WebActionNavigationTypeKey]intValue])
{
[听者忽略];
NSLog(@“打开URL新窗口:%@,[请求URL]);
[[NSWorkspace sharedWorkspace]openURL:[请求URL]];
}
[听者忽略];
}
您单击的链接将在[请求URL]处接收到此委托方法。您可以在默认浏览器中实际加载您单击的链接 为此,您必须实现
WebPolicyDecisionListener
协议,并为WebView
设置policydegate
:
[webView setPolicyDelegate:self];
然后执行以下方法:
-(void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener
{
if (WebNavigationTypeLinkClicked == [[actionInformation objectForKey:WebActionNavigationTypeKey] intValue])
{
[listener ignore];
NSLog(@"Opening URL in browser:%@",[request URL]);
[[NSWorkspace sharedWorkspace] openURL:[request URL]];
}
[listener use];
}
-(void)webView:(WebView *)webView decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id <WebPolicyDecisionListener>)listener
{
if (WebNavigationTypeLinkClicked == [[actionInformation objectForKey:WebActionNavigationTypeKey] intValue])
{
[listener ignore];
NSLog(@"Opening URL new window:%@",[request URL]);
[[NSWorkspace sharedWorkspace] openURL:[request URL]];
}
[listener ignore];
}
-(void)webView:(webView*)webView decisionpolicyfornavigationaction:(NSDictionary*)action信息请求:(NSURLRequest*)请求帧:(WebFrame*)帧决策侦听器:(id)侦听器
{
如果(WebNavigationTypeLinkClicked==[[actionInformation objectForKey:WebActionNavigationTypeKey]intValue])
{
[听者忽略];
NSLog(@“浏览器中的打开URL:%@,[请求URL]);
[[NSWorkspace sharedWorkspace]openURL:[请求URL]];
}
[听众使用];
}
-(void)webView:(webView*)webView DecisionPolicyFornewWindowAction:(NSDictionary*)操作信息请求:(NSURLRequest*)请求新框架名:(NSString*)框架名决策侦听器:(id)侦听器
{
如果(WebNavigationTypeLinkClicked==[[actionInformation objectForKey:WebActionNavigationTypeKey]intValue])
{
[听者忽略];
NSLog(@“打开URL新窗口:%@,[请求URL]);
[[NSWorkspace sharedWorkspace]openURL:[请求URL]];
}
[听者忽略];
}
您单击的此链接将在[请求URL]处接收到此委托方法的链接。应接受此响应。我已经测试过了,效果非常好。这个回答应该被接受。我已经测试过了,效果非常好。