Dcloud开发webApp踩过的坑

一、总结

一句话总结:HTML5+扩展了JavaScript对象plus,使得js可以调用各种浏览器无法实现或实现不佳的系统能力,设备能力如摄像头、陀螺仪、文件系统等,业务能力如上传下载、二维码、地图、支付、语音输入、消息推送等。其实我只要把js拿到手,就可以很方便用在手机开发的网站上面了。

1、Dcloud可以做mobile web项目么?

可以,而且感觉会比浏览器多调用点api

但这就是一个普通的web项目,b/s方式,不可脱线运行,不能调用HTML5Plus的增加api。

其实感觉能够把dcloud里面访问原生应用的js代码拿到手,那么web项目同样具有了这样的功能。

二、Dcloud开发webApp踩过的坑

使用dcloud开发webApp有一段时间了,其中也踩了不少坑,现在总结一些(mui.js版本号,V2.9.0)。

1,app启动后选择进入那个页面。

可以在manifest.json中设置页面入口,通常设置为index.html.但有时需要根据业务需要进入其他页面。应用场景:根据用户登录状态来选择进入不同的页面,如果用户已经登录,则进入index.html页面。如果用户没有登录,则进入登录页面。

mui.plusReady(function(){

var  CurrentWebview=plus.webview.currentWebview();

if(!logined){

CurrentWebview.loadURL("login.html");

}

});   最开始尝试这样写,但是效果并不好。后改成 if(!loggined){

window.location.href="login.html";

}.达到了预期效果。为了更加明显,可以在启动设置里面,设置延时1秒启动。

2,在使用mui弹窗时,如果想自定义样式,需要使用div模式,即使用h5模式的对话框,可以对mui.css进行样式覆盖。

mui.confirm(str_audit,title, btnArray, function(e) {},“div”);

3,使用mui弹窗时,在弹窗上面滑动,弹窗下面的内容也跟着滚动。

解决办法,

function setStopContentScroll(){
$("body,html").css({"overflow":"hidden"});
}
function setContentScroll(){
$("body,html").css({
"overflow-y":"scroll",
"overflow-x":"hidden"
});
}

当弹窗出现时,setStopContentScroll().弹窗关闭时,setContentScroll().

4,弹窗出现时,禁用手机返回键。

mui.back=function(){

return false;

}

当弹窗关闭时,重新设置mui.back为

mui.back=function(){

var currentWebviwe=plus.webview.currentWebview();

plus.webview.close(currentWebviwe);

}

5,使用miui.closePopup()可以关闭当前打开的弹窗。使用mui.closePopups()可以关闭多有对话框。

6,mui页面默认侧滑返回。可以禁止此功能。

var cv=plus.webview.currentWebview();

cv.setStyle({'popGesture':'none'})

三、dcloud从入门到入坑

dcloud从入门到入坑

一、简介

dcloud是一个webapp云打包平台,你可以通过他扩展你的网页功能
官方叫他们的产品名字为

HTML5 Plus移动App,简称5+App,是一种基于HTML、JS、CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与原生App同样强大的功能和性能。

嗯,是一种基于HTML、JS、CSS编写的运行于手机端的App,那么具体是怎么做的呢?
继续看文档

HTML5+扩展了JavaScript对象plus,使得js可以调用各种浏览器无法实现或实现不佳的系统能力,设备能力如摄像头、陀螺仪、文件系统等,业务能力如上传下载、二维码、地图、支付、语音输入、消息推送等。

扩展了一个plus对象啊,就是说可以通过dcloud实现的plus对象来调用原生api。
但是dcloud并不是把所有的原生api都封装到时plus对象中。
dcloud把api分为两部分

1.HTML5Plus规范

常用的扩展能力,比如二维码、语音输入,都封装到了规范中,同时实现了Android和iOS的解析引擎,使得开发者的代码编写一次,可跨平台运行。只要调用plus.对象(html5plus规范的对象,详细请看文档)
html5plus是常见的原生api,并不是所有的原生api,原生的api太多了。但是dcloud也可以调用其他api,就是第二部分

2.natave.js

Native.js把几十万原生API映射成了js对象,通过js可以直接调ios和android的原生API。这部分就不再跨平台,写法分别是plus.ios和plus.android,比如调ios game center,或在android手机桌面创建快捷方式,这些都是平台专有的api。Native.js把几十万原生API映射成了js对象,通过js可以直接调ios和android的原生API。这部分就不再跨平台,写法分别是plus.ios和plus.android,比如调ios game center,或在android手机桌面创建快捷方式,这些都是平台专有的api。

二、5+ App概念解析

首先开发者需要清楚你要做什么,是一个mobile web项目,运行里浏览器里?还是要做一个app,安装和运行在手机上?或者要把一个mobile web项目打包成app?

1. 做一个mobile web项目

在这个模式下,开发者用不到HTML5Plus,使用标准的HTML5语法,运行在浏览器里。这不算5+ App。 此时开发者仍然可以使用HBuilder这个开发工具,新建项目时选择web项目。 开发者也仍然可以使用DCloud提供的mui开源框架,来简化ui的开发。 但这就是一个普通的web项目,b/s方式,不可脱线运行,不能调用HTML5Plus的增加api。

2. 做一个正统的app

传统意义上的app,是c/s方式的,它的程序要安装和运行在手机上,不通过浏览器在线下载。 此时开发者在HBuilder里新建项目时,选择“移动App”。 在移动App项目下编写的HTML、js等文件,是会被打包到原生的安装包(Android是apk包、iOS是ipa包)里的。 此时本地的js和服务器通过ajax交互,由服务器按接口方式给出数据(一般是json),然后客户端的js文件解析json,并根据本地的业务逻辑来渲染页面和执行功能。 所以请不要新建一个移动App项目,然后把本来运行在服务器端的php等文件也都丢到这个项目下。 web项目始终是web项目,哪怕要在app项目里某个界面里,在线加载一个远程的网页,也要把这个远程网页的代码,放到web项目下。 移动App项目下,只有能有html、js、css、json以及一些图片或数据文件,不能包括php、jsp、py等服务器页面。

3. 使用wap2app打包mobile web项目为app

如果开发者想把一个做好的mobile web站,方便快速的打包成app,那么要使用DCloud的wap2app框架。 在HBuilder中新建项目时,选wap2app项目,把mobile web站的url输入进去,参考框架的教程来配置。 wap2app不同于普通的web打包技术,wap2app可真正做达到原生应用的功能和性能体验。 具体教程另见:文档中心-wap2app,http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/1244 wap2app属于5+app,它底层也是强大的HTML5Plus规范和Native.js在支撑。 wap2app项目下的所有文件,也都是打包在本机运行的。 4. 如果你想开发一次,全端覆盖,那么需要使用mui框架 具体参考:http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/591

官方入门
我拿dcloud都是用来把vue打包后的文件,放到dcloud进行打包,做一些原生api处理,如返回按纽啥的。代码都写在index.html里

 

Dcloud开发webApp踩过的坑的更多相关文章

  1. "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"

    欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...

  2. 转:Flutter开发中踩过的坑

    记录一下入手Flutter后实际开发中踩过的一些坑,这些坑希望后来者踩的越少越好.本文章默认读者已经掌握Flutter初步开发基础. 坑1问题:在debug模式下,App启动第一个页面会很慢,甚至是黑 ...

  3. vue项目开发中踩过的坑

    一.路由 这两天移动端的同事在研究vue,跟我说看着我的项目做的,子路由访问的时候是空白的,我第一反应是,不会模块没加载进来吧,还是....此处省略一千字... 废话不多说上代码 路由代码 { pat ...

  4. vuejs 开发中踩到的坑

    用 v-for 循环式  每个item的值相等的情况下,会影响v-model的双向绑定: Modal 组件开发,主要用slot 标签来实现 <template> <transitio ...

  5. 那些年,我们在Django web开发中踩过的坑(一)——神奇的‘/’与ajax+iframe上传

    一.上传图片并在前端展示 为了避免前端整体刷新,我们采用ajax+iframe(兼容所有浏览器)上传,这样用户上传之后就可以立即看到图片: 上传前: 上传后: 前端部分html: <form s ...

  6. iphone 开发h5 踩过的坑

    html,body{ -webkit-text-size-adjust: none; }  // 当需要在中文版chrome浏览器中显示小于12px的字体时,而且此时页面放大效果会被阻止 html,b ...

  7. webAPP踩坑记录

    最近公司突然给我们下了一个任务  一个星期要做出一个系统网站 外加手机app   2个同事负责 web开发  我负责手机app 的开发 今天终于初级版本做完了,记录一下手机app踩过的坑与优化之路 用 ...

  8. 使用vue开发项目需要注意的问题和可能踩到的坑

    最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些可能会踩到的坑.具体内容如下: 一.生命钩子使用需要注意的地方 1.beforeCreat ...

  9. celery开发中踩的坑

    celery开发中踩的坑 celery连接redis 当使用redis做broker,redis连接需要密码时: BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0 ...

随机推荐

  1. java架构解密——实时动态aop

    在上篇博客中个.咱们一起组建了一个容器,里面封装了业务,这样,咱们就将业务和服务的组装放到了client,而client就相当于咱们的开发中使用到的配置文件.大家发现问题了吗?就是我不能动态修改了?业 ...

  2. SSL通关之代码演示样例(四)

    实际开发过程中,server端是不须要多加代码处理的,由于ssl验证过程是由server(tomcat.nginx等)完毕的. 这段代码也是參考了网上的: 新建一个web项目,项目结构和须要引入的ja ...

  3. Vue绑定事件

    <!-- 方法处理器 --> <button v-on:click="doThis"></button> <!-- 内联语句 --> ...

  4. 3.常用Bracket插件

    转自:https://blog.csdn.net/iso_wsy/article/details/52608205 1.Emmet 如果你从事Web前端开发的话,对该插件一定不会陌生.它可以加快你的 ...

  5. 8.ZOrder

    T3LayerZorder.h #pragma once #include "cocos2d.h" USING_NS_CC; class T3LayerZorder:public ...

  6. OpenCV —— 矩阵操作

    多通道的矩阵 —— 通道是连续的!! 要将指向该数据类型的指针移动到下一通道,我们只需要将其增加1.如果想访问下一个“像素”或者元素集,则需要一定的偏移量 矩阵的step元素是矩阵中行的长度,单位为字 ...

  7. vim--学习之emmet插件前端开发

    Emmet 在vim的使用: 1.嵌套 <ctr+y>+,(ctr+y+逗号三者的组合键,ctr+y一起按在按逗号)相当于Ememet中的Tab键. 2.内容的包围: 写好内容,退出编辑模 ...

  8. jQuery插件--根据数据加载的进度动画案例

    css: *{ margin:; padding:; } @media screen and (min-width:320px){ html{font-size:12px;}} @media scre ...

  9. 2017国家集训队作业[agc006e]Rotate 3x3

    2017国家集训队作业[agc006e]Rotate 3x3 题意: ​ 给你一个\(3*N\)的网格,每次操作选择一个\(3*3\)的网格,旋转\(180^\circ\).问可不可以使每个位置\(( ...

  10. 托管非托管Dll动态调用

    原文:托管非托管Dll动态调用 最近经常看到有人问托管非托管Dll调用的问题.对于动态库的调用其实很简单.网上很多代码都实现了Dll的静态调用方法.我主要谈论下动态库的动态加载. 对于托管动态库,实现 ...