UIWebView 打开新tab

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIWebView 打开新tab相关的知识,希望对你有一定的参考价值。

参考技术A

在此之前,最好还是先了解一下,Web开发中,是如何打开新页的。它有两种方式:

为什么它们行为相似,它们之间必有关联(我查过了:joy:)
结论是 target 属性指定了在何处打开链接,它可以指定为以下的值

a标签需要明确指定target=_blank,因为它默认是 _self
而window.open()默认 _blank ,所以默认是打开新页的。它也可以指定target的,它的完整定义是 window.open(URL,target,specs,replace)

那接下来,我们的问题可换为,如何 在UIWebView里识别链接的target属性

UIWebView 有一个代理对象,可以在网页加载过程中收到回调,获取一些信息。从 UIWebViewDelegate 中看看,它有哪些代理方法

很快我们就找到了入口

这个方法会在链接加载之前被调用,target判断只能从它的两个参数入手了 request & navigationType

navigationType 是一个 枚举值 ,能识别出是否是超链接、表格提交、前进后退、刷新、表格重复提交,但就是没有target或frame之类的识别😂
全村的希望只能放在 request 的身上了,但它只是个标准的http request,根本不会携带frame这种UI层的信息...

好在Google是万能的:joy:,我们还是找到了解决方案:
希望还是在request,我们可以 让打开新页的request.url携带上一些特殊的信息 ...

这之后,当收到一个链接形如 ftnewtab:url 的request时,就可以明确,嗯,这是个要打开新页面的链接

接下来且看如何修改 a.href 以及重写 window.open()

这样的事当然是要交给强大的JS了

经过JS注入后,发起一个新页请求时,就会得到一个特殊的URL了,当然也需要特殊处理一下

UIWebView 新增 Url 加载动画效果

【中文标题】UIWebView 新增 Url 加载动画效果【英文标题】:UIWebView New Url load animation effect 【发布时间】:2012-12-27 06:03:30 【问题描述】:

我们可以在加载效果时在 webview 中加载带有动画的新 url 吗? 即我想在我的 webview 加载新的 url 或在 webview 中打开的网站上单击的任何链接时给它一个动画。 当用户点击链接/加载新网址时,我想在我的 webview 上使用后退按钮给 pushviewController 类型的动画(屏幕从右到左移动)以返回(webView 视图从左到右移动)。

【问题讨论】:

当你在 webview 中使用 html 时,你可以通过调用 HTML 5 的一些动画方法来实现 实际上我无法得到你的建议让我的 html 元素动画!我正在使用第三方工具,其中我在左侧有一个表格视图控制器,在右侧有一个 webview。我在 webview 上方的右侧添加了一个导航栏,其中包含后退按钮。如果用户点击它,webview 将加载以前的 url。我想在这里添加推/弹出视图控制器类型动画 如果您想显示加载视图,请继续使用@neo 的答案。似乎您想在 webview 内容的页面之间渲染时显示动画。对于那件事,您需要修改 webview 的 html 内容,换句话说,网站应该使用 HTML5 应用动画,不能从 webview 完成... 【参考方案1】:

是的。

您可以在 - (void)webViewDidStartLoad:(UIWebView *)webView 中堆叠视图并使用 - (void)webViewDidFinishLoad:(UIWebView *)webView 关闭它

例如,

WebViewController.h

@interface WebViewController : UIViewController<UIWebViewDelegate> 
 IBOutlet UIWebView *webView;

WebViewController.m

- (void)viewDidLoad 
    [super viewDidLoad];
    webView.delegate = self;


- (void)webViewDidStartLoad:(UIWebView *)webView 
   [self.navigationController pushViewController:someViewController animated:YES];


- (void)webViewDidFinishLoad:(UIWebView *)webView 
 [self.navigationController popViewControllerAnimated:YES];

【讨论】:

【参考方案2】:

当一个新的 URL 加载到 UIWebView 中时,它是

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request  navigationType:(UIWebViewNavigationType)navigationType 

     //Code for animating view .
     //Code for back button.
    

将调用委托方法。 在这个委托方法中做你需要的东西。

【讨论】:

以上是关于UIWebView 打开新tab的主要内容,如果未能解决你的问题,请参考以下文章

新导航和 webview 中的 Uiwebview 链接

UIWebView 新增 Url 加载动画效果

UIWebView 没有响应

UIWebView 打开外部链接

在(BOOL)webView 中:如何打开在 UIWebView 中单击的 URL 以打开模态 UIWebView

加载新的 html 字符串时如何防止 UIWebView 滚动到顶部?