3.4版本attachmentSimple 组件在APP上传文件闪退

原因:在V3.4及之前的版本,有些手机使用attachmentSimple组件上传文件,拍照等操作的时候,导致APP闪退或重启! 解决方法: 1.  在V3.5版本中,将会解决这个问题; 2. 在V3.4及之前的版本中,执行以下操作 使用attachmentSimple中的FileUploadChooserActivity.java文件替换Native/templates/advanced/platforms/android/JustepGetContent/src/main/java/com/justep/x5/support/chooser/FileUploadChooserActivity.java 之后重新打包生成App.

闪退或者studio报错

报错原因,studio删除,报错如图: 首先注意:x5开发工具解压的目录位置不能有空格,不能有中文,目录结构不要太长!(建议解压在磁盘根目录,一级目录下) 解决方法一, 1.关闭studio 2.删除\studio\workspace\.metadata\.plugins 3.把 \studio\workspace\.metadata_bakup\.plugins 复制到 \studio\workspace\.metadata下 4.启动studio   方法二 1.如果上边的方法不行,就再试试把studio\dropins\studio-app2\plugins\plugin\lib\cef1\chromium.jar这个jar包复制到studio\dropins\studio-app2\plugins\plugin\lib下,重启studio 2.或者下此文件,赋值到studio\dropins\studio-app2\plugins\plugin\lib下,重启studio chromium

拍照后把相片放在img标签上显示

原因:在APP中,想实现拍照后,图片可以在页面中直接显示出来!这个使用cordova插件实现(cordova-plugin-camera)!详细用法请参考它的API文档!需要注意,有些图片,设置了src属性的值。可以还是没正常显示! 解决方案: 参考:http://bbs.wex5.com/forum.php?mod=viewthread&tid=91095 Model.prototype.takePicBtnClick = function(event){ if(!navigator.camera){ return; } var self = this; navigator.camera.getPicture(onLoadImageSuccess, onLoadImageFail, { destinationType:navigator.camera.DestinationType.DATA_URL, allowEdit:true, quality:80, targetWidth:100, targetHeight:100, saveToPhotoAlbum:true }); //拍照成功后回调 function onLoadImageSuccess(imageData){ localStorage.setItem("imageData","data:image/jpeg;base64,"+imageData); var smallImage = document.getElementById(self.getIDByXID('image1')); //显示图像 smallImage.style.display = [...]

屏蔽或自定义报错样式

原因: 有些用户反映,APP运行出错,比如网络异常等报错的提示信息不够友好!让用户不知所措!所以这里提供一中方法,可以修改成自己想要的错误提示框 解决方案: 修改/UI2/system/lib/base/error.js中的window.onerror 方法即可,改成你自己的,改完后需要重新合并js文件 \tools\dist\dist.bat 其中,ErrorDialog 就是定义的弹出页,你可以在这里修改引入cordova 然后弹出原生界面!

js中 MD5加密的写法

原因:在客户端请求服务器时,有些数据比较保密,比如密码,为了防止网络传输过程中,信息被人盗取!建议关键的信息进行md5加密!平台提供的很多基础类都是直接引入就可以调用的!而MD5 还需要动态new 解决方案: 1.引用var MD5 = require('$UI/system/lib/base/md5'); 2.md5 = new MD5(); 3.md5.hex_md5("XXXXX"); 为了安全起见,可以进行二次加密或多次加密!往往用户登录的时候就需要密码加密!数据库中存储的也是加密后的字符串!这样就保证了密码绝对的安全!

baas后端的sqlQuery action的sql语句中支持两种参数写法

原因:有些逻辑,比如多表关联,或者其他特殊sql语句需要自定义sql语句才能够解决,平台提供了sqlQuery action可以设置sql语句,传参有以下两种方式 解决方案: 1、:name----一个:的方式,这种是值参数,类似于我们通常的的sql中的?; 如:select * from abc where name=:name 前端设置通过data设置name='liming' data.filters.setVar("name",'liming'); 最终服务端按 select * from abc where name=?,'liming'执行 在baas设计器中设置条件,参考/Baas/justep/netease.service.m action queryNetease_user 定义了参数condition ,值为fID=:usera 添加参数 var-usera 前端设置 data.filters.setVar("usera",'123456'); 最终也会在标准的queryAction 中拼接这个where条件 2、::filter----两个::的方式,这种参数将会拼到sql中去 如:select * from a [...]

自定义页面切换动画

原因:页面切换,无论是shell跳转还是contents组件的切换,底层都是使用的contents组件实现的!所以如果想自定义页面切换的其他转场样式,就需要做如下修改 解决方案: /UI2/system/components/justep/contents/contents.js 中代码:addClass('slidable') 表示添加动画样式,可以修改成自己定义的class样式(当然也可以直接使用这个名称) css样式在文件:/UI2/system/components/justep/contents/css/contents.less 中,修改成你自己的动画效果后,就是参考slidable的定义来写你自己的动画 执行tools\dist\less.bat 生成新的css文件! 执行\tools\dist\dist.bat合并js(js没修改可以不用执行)

windowContainer组件父页面中调用子页面的方法

原因:为了页面优化!windowContainer组件往往设置autoLoad为false,需要显示的时候才去加载,有时候里面页面还没加载呢,父页面就想提前调用了子页面的方法!会导致出错,undefind 错误 解决方案: js方法中先做判断,if(this.comp('windowContainerXid').getInnerModel()) 条件如果为false,说明子页面还没有加载!就执行this.comp('windowContainerXid').load() 加载子页面

如何判断当前设备是什么,然后执行相应的代码

原因: WeX5开发的应用是支持同时在不同客户端运行的,比如AndroidAPP iosAPP 微信APP PC浏览器,移动浏览器等各种设备,有时候需要做判断,在不同的设备中执行不同的代码:比如corodva插件只能在APP运行,而且有些插件在Android和ios中运行的代码还不一样。微信APP支付只能是执行微信内支付的代码!这个可以看外卖案例的代码 解决方案: 看/UI2/system/lib/base/browser.js 这个文件Browser对象封装了各种设备的判断API,在js代码中直接这样判断即可, 如是否属于x5的手机APP中运行 justep.Browser.isX5App 是否是苹果系统中运行 justep.Browser.isIOS 其他方法用法以此类推

iframe中嵌套html页面中的js调用外层w页面的js方法

原因: 有时候需要使用iframe 标签嵌套一个原始的html来显示页面,比如百度地图!(常常是第三方的框架!在原始的html中实现比较简单)这个时候,如果想外层w页面和里层iframe做数据交互,相互调用js方法!就需要如下实现 解决方案: 一、w页面中如果想访问iframe中的js方法!就需要获取到iframe中的window对象!这个可以上网查,一般获取到iframe节点的dom对象后,通过mapFrame.contentWindow.就可以得到了 var ifr = this.getElementByXid("iframeXid").contentWindow;//取得子页面的窗口 var img = ifr.document.getElementById("bkbjImg");//取得子页面中要操作的dom元素 img.src = "img/bkbjRed.gif";//更新元素的src属性值 二、iframe中的js访问外层w的js方法以map为例,如下: 1、在调用map.html的父窗口mapActivity.w中,随便加一个div,方便调用。源码如下: 2、在调用map.html的父窗口mapActivity.js中,随便加一个函数,为了测试。源码如下: Model.prototype.test = function(data){ alert(data.a); }; 3、在map.html文件中,在想调用父窗口的地方加入如下代码: var partenW = window.parent; var parentDiv = partenW.document.getElementById('ContextForId'); [...]