一,写在前面

我们平常使用电脑浏览器浏览网页可能会有三种方式:

1.新窗口

2.当前窗口种的新选项卡

3.当前选项卡或者窗口

我们知道在电脑系统中同一时间可以开启多个相同的进程,就像你可以同时登陆2个qq一样,而在手机中,同一进程只能有一个在运行。

对比智能手机的浏览器如:QQ浏览器,百度浏览器,电脑浏览器中的新窗口相当于重新开启了一个浏览器,而在手机中,我们是使用WebView加载网页,虽然浏览器其应用进程只有一个,

但是内存中WebView对象可以有多个。在手机上的新窗口就是另外创建一个WebView来加载新的网页。这种关系使得在手机上浏览网页有两种:

1.新选项卡

2.当前选项卡

上面简单了解了他们的关系,下面切入正题

二,setSupportMultipleWindows与onCreatWindow

1.setSupportMultipleWindows

我们在使用WebView时会首先对其进行初始化

WebSettings webSettings = webView.getSettings();
settings.setDefaultFontSize(16);
settings.setDefaultFixedFontSize(13);
settings.setSupportMultipleWindows(true)
...等等

再看HTML <a> 标签的 target 属性:

<a href="http://www.baidu.com" target="_blank">百度一下</a>

tartget有4个属性:

_blank

浏览器总在一个新打开、未命名的窗口中载入目标文档。

_self

这个目标的值对所有没有指定目标的 <a> 标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源文档。这个目标是多余且不必要的,除非和文档标题 <base> 标签中的 target 属性一起使用。

_parent

这个目标使得文档载入父窗口或者包含来超链接引用的框架的框架集。如果这个引用是在窗口或者在顶级框架中,那么它与目标 _self 等效。

_top

这个目标使得文档载入包含这个超链接的窗口,用 _top 目标将会清除所有被包含的框架并将文档载入整个浏览器窗口。

我们只需要知道_blank属性即可

setSupportMultipleWindows这个方法是什么意思呢?

setSupportMultipleWindows默认的是false,也就是说WebView默人不支持新窗口,但是这个不是说WebView不能打开多个页面了,只是你点击页面上的连接,当它的target属性是_blank时。它会在当前你所看到的页面继续加载那个连接。而不是重新打开一个窗口。

当你设置为true时,就代表你想要你的WebView支持多窗口,但是一旦设置为true,必须要重写WebChromeClient的onCreateWindow方法。

下面看看这个方法的签名:

   @Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { }

仔细阅读文档,大家应该知道这个参数的意思:

view :请求新窗口的WebView

isDialog : 如果是true,代表这个新窗口只是个对话框,如果是false,则是一个整体的大小的窗口

isUserGesture 如果是true,代表这个请求是用户触发的,例如点击一个页面上的一个连接

resultMsg ,当一个新的WebView被创建时这个只被传递给他,resultMsg.obj是一个WebViewTransport的对象,它被用来传送给新创建的WebView,使用方法:

WebView.WebViewTransport.setWebView(WebView)

返回值:这个方法如果返回true,代表这个主机应用会创建一个新的窗口,否则应该返回fasle。如果你返回了false,但是依然发送resulMsg会导致一个未知的结果。

如果我们仅仅是将WebView嵌入我们自己的应用然后加载网页,很少有必要去设置支持多窗口。只在当前窗口加载新的网页就可。

下面是重写onCreateWindow的必要代码:

WebView.WebViewTransport transport = (WebView.WebViewTransport) msg.obj;
transport.setWebView(webview); //此webview可以是一般新创建的
msg.sendToTarget();

浅谈WebView在新窗口浏览网页(setSupportMultipleWindows()与onCreateWindow()关系)的更多相关文章

  1. 浅谈测试rhel7新功能时的感受及遇到的问题【转载】

    半夜起来看世界杯,没啥激情,但是又怕错误意大利和英格兰的比赛,就看了rhel7 相关新功能的介绍. rhel7的下载地址: https://access.redhat.com/site/downloa ...

  2. 浅谈WebView的使用 js alert

    http://blog.csdn.net/liuhe688/article/details/6549263 WebView是Android中一个非常实用的组件,它和Safai.Chrome一样都是基于 ...

  3. Response.Redirect在新窗口打开网页

    来自:http://www.woosky.net/show.asp?id=761 Respose.Write("<script language='javascript'>win ...

  4. 浅谈HTML5的新特性

    2014年10月29日,W3C宣布,经过接近8年的艰苦努力,HTML5标准规范终于制定完成. HTML5将会取代1999年制定的HTML 4.01.XHTML 1.0标准,使网络标准达到符合当代的网络 ...

  5. 浅谈html5及其新特性

    什么是 HTML5? HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. HTML 的上一个版本诞生于 1999 年.自从那以后,Web 世界已经经历了巨变. HTML5 仍 ...

  6. Android开发学习笔记:浅谈WebView(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...

  7. Android开发学习笔记:浅谈WebView

    本文转自:http://www.2cto.com/kf/201108/101518.html WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页 ...

  8. 安卓开发_浅谈WebView(转)

    ,有一个功能需要在APP中调用网站 百度了一下,发现需要用WebView来实现 实现方法很容易,我就不在这里写一遍了 ,直接转一下我学习的内容吧 原创作品,允许转载,转载时请务必以超链接形式标明文章  ...

  9. 转 Android开发学习笔记:浅谈WebView

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/647456 ...

随机推荐

  1. AS中Git操作和Git工作流

    查阅并学习安卓中如何使用Git,并扩展学了下Gitflow工作流程,以下是我觉得有用,系统,详细的相关文章. AS中Git操作系列 https://www.jianshu.com/p/0cc226ee ...

  2. jEasyUI 菜单与按钮

    jQuery EasyUI 菜单与按钮 – 创建简单的菜单 <div id="mm" class="easyui-menu" style="wi ...

  3. RabbitMQ的特点与应用场景(二)

      1.RabbitMQ的主要特点 (1)可靠性:RabbitMQ可通过队列持久化,交换机持久化,消息持久化及ACK回应等机制保证可靠性 (2)支持多种语言与协议:RabbitMQ几乎支持所有的编程语 ...

  4. weui 注意事项

    个人随笔日记,还请小心采纳为甚 手机移动web开发必须要做的两点: 1.body中加上ontouchstart,即<body ontouchstart>...</body>: ...

  5. dedecms Fatal error: Out of memory

    max_execution_time = 300   php执行持续最长时间  比如:网站全站更新max_input_time = 30   php传送数据最长时间  比如:上传大文件memory_l ...

  6. iOS AVPlayer 的使用实践

    前两天在网上看到一篇博客,介绍AVPlayer的使用,但是只简单介绍了一下单个的本地文件如何播放,心血来潮,就想着做一个类似于播放器的东西,能够实现播放网络歌曲,循环播放多首音乐,下面我们来实现一下 ...

  7. 前端基础(二):CSS

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...

  8. Matlab修改数值格式/精度/小数位数

    ————————————命令行方法————————————— 直接在命令行中输入以下命令,但该命令不影响数据的存储形式和计算精度,下次还需进行修改. format 默认格式  format short ...

  9. 移动端meta常用的设置

    1.qq强制横屏或者竖屏显示    :   <meta name="x5-orientation" content="portrait ||andscape&quo ...

  10. jsp下拉列表

    <c:set var="REPORT_TYPE_NORMAL" value="<%=SysIndexFormTemp.REPORT_TYPE_NORMAL%& ...