HBuilder完成webApp入门(3) 关于webview (转)

  个人认为WebView是 html5+ API的一个非常重要的部分。

 WebView 的帮助文档http://www.html5plus.org/doc/zh_cn/webview.html

为什么对WebView的掌握很重要?因为它是一个HTML5+ APP的基础。刚刚学习HBuilder的同学一般会将重点放在 mui 组件上。mui 提供了很多默认的方法,如 openWindow(打开新页面),back(回退到上一个窗口)等等,不会意识到其实你操作的就是WebView对象。

 那么在HBuilder的引擎中,WebView是一种什么样的实现呢?请参看下图:

从上面的图我们可以看到,每个页面其实就是对应一个WebView对象。每个WebView有自己的javascript运行环境,各个WebView之间不会干扰。同时,所有WebView会共享storage,session等信息。

 如果你之前有Web开发经验,会知道在浏览器里从一个页面转入到新的页面的时候,旧的页面就无论如何也看不到了---除非你有一个返回的处理。

但是HBuilder就不同了。

正如上面的图所示,每次迁移到新的画面的时候,打开了一个新的WebView,但是旧的WebView其实还停留在那里,只不过新的WebView覆盖在了上面。

 当然,如果你直接使用plus.Webview的方法,如create, show 是可以的。但是HBuilder给我们提供了更好的方法,就是 mui 库的 openWindow, preload 等方法

在 mui 中,默认有后退的功能,也就是返回到上一个页面。我们可以看看 back 的代码:

Js代码  收藏代码
  1. $.registerBack = function(back) {  
  2.     return $.regesterHandler('backs', back);  
  3. };  
  4. /** 
  5.  * default 
  6.  */  
  7. $.registerBack({  
  8.     name: 'browser',  
  9.     index: 100,  
  10.     handle: function() {  
  11.         if (window.history.length > 1) {  
  12.             window.history.back();  
  13.             return true;  
  14.         }  
  15.         return false;  
  16.     }  
  17. });  
  18. /** 
  19.  * 后退 
  20.  */  
  21. $.back = function() {  
  22.     if (typeof $.options.back === 'function') {  
  23.         if ($.options.back() === false) {  
  24.             return;  
  25.         }  
  26.     }  
  27.     $.each($.backs, function(index, back) {  
  28.         return !back.handle();  
  29.     });  
  30. };  

 我们可以看到,back 调用的其实是 window.history.back(),这应该依赖于浏览器内核的实现。因为HTML5+ API 不涉及浏览器内核的标准定义,也没有 webview 的生命周期的标准定义,所以大家一定要注意控制 webview 的生命周期,以避免重复创建出来多个 webview。

转载于:https://www.cnblogs.com/lyn940208/p/6013849.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

佛山市南海技师学校计算机类,佛山南海信息技术学校2021年有哪些专业

即将面临毕业的时候,同学们都要选择学校,都要选择专业就读,至于选择什么,就是一大难题了。学习是重要的事情,选择更是件大事。小编整理了学校的招生专业详情,仅供参考。佛山南海信息技术学校专业名单&#…

创建 floating IP - 每天5分钟玩转 OpenStack(106)

先复习一下前面我们讨论的知识。 当租户网络连接到 Neutron router,通常将 router 作为默认网关。当 router 接收到 instance 的数据包,并将其转发到外网时: 1. router 会修改包的源地址为自己的外网地址,这样确保数据包转发到外网&#xff…

把ipa文件上传到服务器,windows电脑上传ipa到appstore的详细流程

在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。但是在苹果开发者中心无法直接上传ipa文件,它要求我们使用xcode或transport等工具上传ipa文件,但是xcode和transport不能安装…

Java的5个古怪问题

我们有机会尝试了一些最奇怪的Java难题 即使是最有经验的Java开发人员,也会在这篇文章中发现令人困惑的问题。 或至少是有趣的(绝对不公平)。 在经历了Java Deathmatch冒险之后,我们决定这次发布一系列不同的问题,着重…

js 取得数组下标_数组的介绍及使用

JavaScript 中的数组常用于在单个变量中存储多个值。数组就是一组数据的集合,在内存中表现为一段连续的内存地址(保存在堆内存)。创建数组的目的就是为了保存更多的数据。数组概念和语法概念:数组是一个特殊变量,一次可以容纳多个值。特点&am…

bigdecimal取小数部分_小数精度丢失问题分析和解决

无论在什么业务中,钱?是非常重要的东西,对账的时候一定要对的上,不能这边少一分钱那边多一分钱。对于数值的计算,尤其是小数,floate和double都是禁止使用的。阿里强制要求存放小数时使用 decimal,禁止使用…

使用LinkedList模拟一个堆栈或者队列数据结构

使用LinkedList模拟一个堆栈或者队列数据结构。 堆栈:先进后出 如同一个杯子。 队列:先进先出 如同一个水管。 import java.util.LinkedList;public class DuiLie {private LinkedList link;public DuiLie() {link new LinkedList();}public void m…

k40游戏增强版服务器维护中,Redmi K40 游戏增强版发布,第四台 K40 出现了

原标题:Redmi K40 游戏增强版发布,第四台 K40 出现了今晚 Redmi 发布了旗下的新款游戏手机 —— Redmi K40 游戏增强版,这也是K40、K40 Pro、K40 Pro 之后的又一款 K40 产品,主打的是专游戏功能和轻薄设计。Redmi K40 游戏增强版使…

mpvue微信小程序动画_入门微信小程序

为何现在的微信小程序还是高温不退?主要原因如下:无需安装、不占内存、易传播。废话不多说,开始进入开发!-----------小程序环境搭建-----------------------------------账号注册百度搜索 "微信公众平台"官网地址&…

瀑布流式布局

今天终于搞懂了瀑布流式布局,哈哈,总结下 瀑布流式布局分为两种类型:1、每一列都限定宽度不限定高度的布局(使用浮动)2、宽度不是写死的,是根据页面的放大缩小变化的(定位布局) 瀑布…

物理服务器备份系统,物理备份和逻辑备份区别

物理备份和逻辑备份区别 内容精选换一换可能这份面试题还不足以包含所有Java问题,但有了它,我相信你一定不会“败”的很惨,有了它,足以应对目前市面上绝大部分的Java面试了,因为这些问题不论是从深度还是广度上来讲&am…

dd命令iso linux_BootISO:从 ISO 文件中创建一个可启动的 USB 设备

今天,我们将讨论名为 BootISO 的实用程序类似工具。它是一个简单的 bash 脚本,允许用户来从 ISO 文件中创建一个可启动的 USB 设备。-- Prakash Subramanian(作者)为了安装操作系统,我们中的大多数人(包括我)经常从 ISO 文件中创建一个可启动…

java基础-接口

转载于:https://www.cnblogs.com/ceshi2016/p/6025027.html

gwt入门和进阶_GWT入门

gwt入门和进阶GWT是Google Web Development Kit的缩写,可让程序员使用Java开发Ajax Web应用程序。 GWT编译器将Java代码转换为JavaScript和html代码。 GWT应用程序称为模块,并且使用xml文件描述模块,假设该模块名称为xml文件的“ mymodule”名…

workbook加载文件路径_通过Workbook.XML 修复Excel自定义名称

小伙伴们经常想求助IT 提升打开Excel的速度, 标准回答是:重启。其实Excel 中影响打开速度的几个因素:1. 公式 2. 链接 3. 自定义名称 自定义名称常常被人忽视,里面经常隐藏着众多错误,而且有很多的名称是隐藏的&#x…

将IDE检查应用于自定义Java批注

J2SE 5中注释的引入改变了我们编写和处理Java的方式。 除了Java SE的预定义注释外 ,框架,IDE和工具包还引入了自己的自定义注释 。 Checker框架提供了一些示例,说明如何使用自定义注释在Java中增加类型安全性 。 在本文中,我着眼于…

有什么用_app用什么软件编写

自己咋开发APP这得看你的学习程度了,如果你学了安卓开发那么久按照教程来吧,如果没有学过,那么就看看我的回答是不是贴题意的。比较快的开发app方式。接入任意后台,通过HBuilder封装成app。2.使用MUI,借用官方的组件代…

Git 初始化版本库

创建带工作区的版本库 在开始一个新项目时,首先就要创建并初始化代码库。如果是在本机的工作目录中,那么: $ git init 也就够用了。如果想要初始化的版本库不在当前目录,需要为 git init 命令指定版本库所在的目录: $ …

如果今天完成,ESB会是什么样子?

JavaOne 2015即将结束,这又是一次很棒的社区活动。 我和Rafael进行了两次会议和HOL 。 我最喜欢的会议之一实际上是:关于ESB(如果今天完成的话)的样子。 我以为那是过去? 我通常也倾向于这样说。 但是,系统…

线程间的通信 设置线程等待与线程唤醒

代码实现上述框图: 1 //等待唤醒机制2 3 /*4 wait(),notify(),notifyAll()必须用在同步中,因为同步中才有锁。5 指明让持有那个锁的线程去等待或被唤醒,例如object.wait(),表明让持有object这把锁的线程等待。6 7 wait():让线程进入等待状态&…