如何在safari中实现多个标签?

时间:2017-07-03 07:51:14

标签: ios swift xcode

我目前正在为iPhone创建一个google-cast应用。它的工作就像我想要的一样,我可以在GoogleCast上播放视频。我唯一的问题是,如果访问的网站用户有弹出式广告,则网页视图会自动重定向到该广告网站(有时会立即重定向多次)。

由于UIWebView没有adBlock功能,我想也许我应该实现多个标签功能,以便可以在新标签页中打开广告,用户可以手动关闭广告标签。

提前致谢。

你们有没有这方面的经验?

3 个答案:

答案 0 :(得分:2)

你们首先需要使用WKWebView而不是UIWebView,现在关于选项卡,实际上并没有一个已经制作好的组件可以为你处理这个问题,但你可以做的是拦截来自webview的请求' s委托(用于WKWebView的WKNavigationDelegate和用于UIWebView的UIWebViewDelegate),当您感觉需要在单独的Web视图中打开请求时,您将在当前webview中阻止该请求,并创建一个新的视图,其中嵌入了一个新的webview并关闭按钮以及您感觉到的其他任何标签'需要拥有并执行该请求(在原始webview中阻止的请求)

答案 1 :(得分:1)

decidePolicyForNavigationAction委托方法中,您可以声明一个新的WKWebView类,并根据WKWebViewnavigationType将其作为子视图添加到上一个request类。例如,请参阅下面的代码片段,了解我的工作情况,以及哪些工作正常。

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{

if (navigationAction.navigationType == WKNavigationTypeLinkActivated) { // OR if (![navigationAction.request.URL.Path isEqualToString:@"Previous URL Path"]) {

    // Add cancel button at top of new tab
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(5, 5, 50, 20);
    [btn setTitle:@"Close" forState:UIControlStateNormal];
    btn.backgroundColor = [UIColor redColor];
    [btn addTarget:self action:@selector(close:) forControlEvents:UIControlEventTouchUpInside];

    CGRect nFrm = oldWebVw.frame; // Set frame as per your requirement.
    nFrm.origin.y = 100;
    nFrm.size.height -=120;

    newWebVw = [[WKWebView alloc] initWithFrame:nFrm];
    newWebVw.backgroundColor = [UIColor blueColor];
    [newWebVw addSubview:btn];
    [oldWebVw addSubview:newWebVw];
    [newWebVw loadRequest:navigationAction.request];
    decisionHandler(WKNavigationActionPolicyCancel); // You must cancel the policy else the new request loades on previous WKWebView class
    return;
  }
  decisionHandler(WKNavigationActionPolicyAllow);
} 

答案 2 :(得分:0)

这是一个支持多标签的开源ios浏览器

Radium Browser