如何在新的UIWebViews中打开新页面?

时间:2014-06-13 09:59:18

标签: ios objective-c uiwebview

我想在新的UIWebViews中打开新的网页。例如,当您访问Google时会将其视为一个网页,但当您点击Google中的Google图片时,它将被视为新的网页。

所有新网页都将加载到新的UIWebViews中,并将放入包含所有UIWebViews的历史数组中。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if (navigationType == UIWebViewNavigationTypeBackForward) {

        // The UIWebView already exists for that page in the history array, call it and display it.
    }
    else if (navigationType == UIWebViewNavigationTypeFormResubmitted) {

        // No problem, load it in the current UIWebView.
    }
    else if (navigationType == UIWebViewNavigationTypeFormSubmitted) {

        // It's a new page, load it in a new UIWebView.
    }
    else if (navigationType == UIWebViewNavigationTypeLinkClicked) {

        // It's a new page, load it in a new UIWebView
    }
    else if (navigationType == UIWebViewNavigationTypeReload) {

        // Just reload the current UIWebView.
    }
    else if (navigationType == UIWebViewNavigationTypeOther) {

        // There's no way this is a new page. Do nothing.
    }
}

正如你可能已经猜到的那样,它没有用。您所要做的就是遵循这条道路:

  1. 转到http://www.9gag.com
  2. 点击任意帖子下的推特上的分享图标。
  3. 在Twitter上分享的链接看起来像这样:

    https://twitter.com/intent/tweet?original_referer=http%3A%2F%2F9gag.com%2Fgag%2FaRQpqj2%3Fref%3Dt.mw&source=tweetbutton&text=I%20don%27t%20throw%20the%20word%20%27genius%27%20around%20loosely%2C%20but...&url=http%3A%2F%2F9gag.com%2Fgag%2FaRQpqj2%3Fref%3Dt.mw&via=9GAG
    

    虽然有人会希望此链接属于 LinkClicked 类型,因为您点击了推特图标去了那里,它实际上是其他类型,任何桌面Web浏览器会认为此链接是弹出窗口,并且会在新窗口中打开它。 iOS上的Safari会在新选项卡中打开此链接。我想在新的UIWebView中打开它,但的问题是,UIWebView代表中的广告请求与弹出请求没有区别

    Safari是如何做到的?

    编辑:下面的答案正好是UIWebView的问题。它让每个人都认为代表就是答案,事实上,即使是最简单的东西,你也可以不做任何事情,甚至是最简单的东西。

    编辑2:我已经和其他浏览器一样检查了Mercury,他们也做对了。他们知道Twitter是一个弹出窗口,他们在新标签中打开它。所以,这不是Apple的错。

1 个答案:

答案 0 :(得分:0)

将第一个Web视图的委托设置为视图控制器。 之后,将以下代码添加到视图控制器。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"%@", request.URL);
    NSLog(@"%@", [request.URL scheme]);
    if ([[request.URL scheme] isEqualToString:@"http"])
    {
        // Create web view here, because you're catching all requests
        // Don't forget to set the delegate.
        NSLog(@"Create new web view with %@", request.URL);
        return NO;
    }

    return YES;
}

如您所见,您应该替换我添加NSLog的部分。您可能希望在此时创建新的Web视图,并将其作为子视图添加到当前视图中。

为什么要检查LinkClicked而不是捕获所有请求?