Webview:区分“在弹出窗口中打开”和“在新标签页中打开”

3
我在我的窗口中有一个 WebView,它加载一些 HTML,我希望知道每当我点击创建窗口的链接时,它是弹出窗口还是“新标签页”链接(即在 标记中使用target="_blank"属性)。

这是我的代码的一些部分:

类初始化时:

[mainWebView setUIDelegate:self];
[mainWebView setPolicyDelegate:self];

在同一个类中的更深层次,代理的实现:

- (WebView*)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request
{
    NSLog(@"The request is %@", request);
    return sender;
}

- (void)webView:(WebView *)webView decidePolicyForNewWindowAction:(NSDictionary *)actionInformation
        request:(NSURLRequest *)request frame:(NSString *)frame decisionListener:(id<WebPolicyDecisionListener>)listener
{
    NSLog(@"New window!");

}

因此,每当创建新窗口(弹出或新标签页链接)时,都会调用createWebViewWithRequest回调,这是正常的。但是无论是什么类型的链接,decidePolicyForNewWindowAction都不会被调用。

似乎有一个名叫here的人和我有同样的问题,但我仍然找不到任何解决方法。


这个代理帮我实现了 createWebViewWithRequest,非常感谢。另外我也遇到了 decidePolicyForNewWindowAction 没有触发的问题,但是我却触发了 decidePolicyForNavigationAction。原因是我的 <a> 标签并没有直接跳转页面,而是触发了一些 JS 代码,最终执行了类似于 window.location = xxx 的操作,所以导致了 decidePolicyForNavigationAction 被触发而不是 decidePolicyForNewWindowAction。不确定你是否也遇到了同样的情况。 - Marson Mao
1个回答

0

对我而言,decidePolicyForNewWindowAction: 可以很好地处理 target="_blank" 链接。如果您展示更多的代码(最好是一个示例项目),我会尝试将其与我的版本进行比较(当然,如果您仍然需要这个)。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接