我想在新的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.
}
}
正如你可能已经猜到的那样,它没有用。您所要做的就是遵循这条道路:
在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的错。
答案 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而不是捕获所有请求?