Objective c 是否仅从Cocoa(OSX,而非iPhone)网络视图加载Safari中的指定链接?

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

我在这里找到了几篇文章,解释了如何在Safari(或默认浏览器)中打开嵌入式WebView中的所有链接,但我找不到任何关于如何在Safari中仅打开所选链接的内容,而默认情况下,这些链接将加载到WebView中。有什么想法吗?

您可以在默认浏览器中加载您单击的链接

为此,您必须实现
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]处接收到此委托方法的链接。

应接受此响应。我已经测试过了,效果非常好。这个回答应该被接受。我已经测试过了,效果非常好。