Objective c 网络视图打开'_空白';链接

Objective c 网络视图打开'_空白';链接,objective-c,xcode,cocoa,webview,Objective C,Xcode,Cocoa,Webview,我有一个网络视图,可以从Internet加载内容。 如果我有一个使用“_blank”属性的链接,那么什么也不会发生 到目前为止,我已经尝试设置我的WebView委托,但我无法让它注册,我甚至无法获取NSLog,所以我一定是用错了。代码如下: - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { [tmpView setUIDelegate:self]; } - (WebView *)webView

我有一个网络视图,可以从Internet加载内容。 如果我有一个使用“_blank”属性的链接,那么什么也不会发生

到目前为止,我已经尝试设置我的WebView委托,但我无法让它注册,我甚至无法获取NSLog,所以我一定是用错了。代码如下:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [tmpView setUIDelegate:self];
}

- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
    NSLog(@"HEY THERE");
    return sender;
}
理想情况下,我想要的是,每当在WebView上单击链接时,该链接总是在该WebView中打开,而不是在其他地方打开

这可能吗

通过研究,我发现了其他方法,但不知道如何使用它们来获得我想要的结果:

webView:decidePolicyForNewWindowAction:request:newFrameName:decisionListener:
我完全被难住了,所以我非常感谢你的帮助


提前感谢大家。

这篇博客文章提供了一个使用JavaScript从链接中基本删除目标属性的解决方案


这篇博客文章提供了一个使用JavaScript从链接中基本删除目标属性的解决方案


如果您不想打开新窗口,只想在当前的
WebView
对象中打开请求,您只需要在代理中执行以下操作:

- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
    [[sender mainFrame] loadRequest:request];
    return sender;
}

如果您不想打开新窗口,只想在当前
WebView
对象中打开请求,则只需在代理中执行此操作:

- (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
    [[sender mainFrame] loadRequest:request];
    return sender;
}
你可以打电话

(WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
它确实奏效了

您还可以实现

(void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id<WebPolicyDecisionListener>)listener
(void)webView:(webView*)发送方决策fornewwindowaction:(NSDictionary*)操作信息请求:(NSURLRequest*)请求新框架名:(NSString*)框架名决策侦听器:(id)侦听器
做你想做的事。

你可以打电话

(WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
它确实奏效了

您还可以实现

(void)webView:(WebView *)sender decidePolicyForNewWindowAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request newFrameName:(NSString *)frameName decisionListener:(id<WebPolicyDecisionListener>)listener
(void)webView:(webView*)发送方决策fornewwindowaction:(NSDictionary*)操作信息请求:(NSURLRequest*)请求新框架名:(NSString*)框架名决策侦听器:(id)侦听器

做你想做的事。

这可能会有帮助:@hanumanDev,这不会有帮助,因为这是一篇关于iOS
UIWebView
的文章,问题是关于Mac
WebView
。这可能会有帮助:@hanumanDev,这不会有什么帮助,因为这是一篇关于iOS
UIWebView
的文章,问题是关于Mac
WebView
。当在Chrome上测试时,这确实删除了所有不好的属性,这正是我想要的,但是代码似乎对我的WebView没有任何作用?我已经把它放在WebViewProgressFinished方法中,但是链接仍然不能被点击?当在Chrome上测试时,这确实删除了所有不好的属性,这正是我想要的,但是代码似乎对我的WebView没有任何作用?我已经将其放在WebViewProgressFinished方法中,但链接仍然无法单击?这正是我所寻找的,我只是不知道如何链接代理?我是否从WebView向FrameLoadDelegate中的文件所有者绘制了箭头?我之所以问这个问题,是因为目前这个方法似乎没有得到执行?再次感谢您,该方法是
WebUIDelegate
协议的一部分,因此您需要将实现该方法的对象指定为
WebView
UIDelegate
。在示例代码中,您已经在应用程序代理中实现了它,因此您可以将
WebView
UIDelegate
出口链接到
AppDelegate
对象。或者,如果您的应用程序代理具有指向web视图的出口,您可以调用
[WebView setUIDelegate:self]
applicationdFinishLaunching:
中。你是绝对的英雄,它可以工作!我已经试了好几个小时了啊。非常感谢!这正是我想要的,我只是不知道如何链接代理?我是否从WebView向FrameLoadDelegate中的文件所有者绘制了箭头?我之所以问这个问题,是因为目前这个方法似乎没有得到执行?再次感谢您,该方法是
WebUIDelegate
协议的一部分,因此您需要将实现该方法的对象指定为
WebView
UIDelegate
。在示例代码中,您已经在应用程序代理中实现了它,因此您可以将
WebView
UIDelegate
出口链接到
AppDelegate
对象。或者,如果您的应用程序代理具有指向web视图的出口,您可以调用
[WebView setUIDelegate:self]
applicationdFinishLaunching:
中。你是绝对的英雄,它可以工作!我已经试了好几个小时了啊。非常感谢!