初识移动端跨平台(JavaScript篇)
来源:互联网 发布:win7软件停止运行 编辑:程序博客网 时间:2024/04/28 10:23
因为最近项目需要跨平台,在网上找到这个demo。
本文主要讲WebViewJavascriptBridge在ios端怎么样使用。
首先简单说一下跨平台。
由于现在很多产品都是有安卓版跟ios版,就意味着同一样东西要出两套,由两组人去完成,不仅增加了开发成本,也大大加剧了维护成本。近期提出了跨平台的思路,用html写页面,分别用webview(ios),(安卓)来加载,对某些html无法调用的硬件,通过双方的交互来实现方法的互调和传值。这个过程就是跨平台。实践证明除了各平台浏览器内核的兼容性问题需要解决(虽然都是Webkit内核),其余都没什么大问题,包括调用原生功能。
/********************************** native Api 列表 ******************************* * nativebridge.send 方法 * var data = "{'method':'Login_timeout'}" * var data = "{'method':'Progress','type':'show'}" * var data = "{'method':'Progress','type':'dismiss'}" * var data = "{'method':'Progress','type':'showSuccess','message':'你好'}" * var data = "{'method':'Progress','type':'showError','message':'你好'}" * var data = "{'method':'Progress','type':'dismissSuccess','message':'你好'}" * var data = "{'method':'Progress','type':'dismissError','message':'你好'}" * var data = "{'method':'NewWindow','url':'http://baidu','title':'你好'}" * var data = "{'method':'NativeBack','type':'isRoot'}" * var data = "{'method':'QRCodeReader'}" * * 备注: 所有data可以拓展参数,入:var data = "{'method':'QRCodeReader','event':'button1'}" * 将在 nativeBridgeInit 的回调方法里被返回 **********************************************************************************//******************************** native Api 调用方式 ****************************** * 1. 初始化 * nativeBridgeInit(function(nativeResponse) * { * // nativeResponse,即app native回传的参数,如二维码扫描的结果值 * // 格式(在调用send方法发送的data数据上附加结果数据): * // 如:var data = "{'method':'QRCodeReader','event':'button1'}" * // nativeResponse = "{'method':'QRCodeReader','event':'button1', '':''}" * }); * * 2. 调用响应appNative接口 * nativebridge.send(data, responseCallback); * * 例子: * var data = "{'method':'Progress','type':'show'}"; * nativebridge.send(data, function(nativeResponse){ * // nativeResponse: {\"ret\":\"1\",\"message\":\"success\"} * // web端处理代码,可通过ret值判断native接口是否调用成功,做响应处理 * }); ***********************************************************************************/ // debug模式开关var isDebug = true;/**********************************************************************************//************************************** 调试方法 **********************************//**********************************************************************************//** * 打印控制台错误信息 */ window.onerror = function(sMsg, sUrl, sLine) { if(isDebug){ var oErrorLog = document.createElement("div"); oErrorLog.innerHTML = "<b>Console log msg:</b><p>"; oErrorLog.innerHTML += "Error: " + sMsg + "<br>"; oErrorLog.innerHTML += "Line: " + sLine + "<br>"; oErrorLog.innerHTML += "URL: " + sUrl + "<br>"; document.getElementsByTagName("body")[0].appendChild(oErrorLog); } return false;}/** * 打印debug日志 */ function log(message, data) { if(isDebug){ var oDebugLog = document.createElement("div"); var el = document.createElement('div'); if(data){ el.innerHTML = "msg:" + message + ",data:" + JSON.stringify(data) + "<br/>"; }else{ el.innerHTML = "msg:" + message + "<br/>"; } if (oDebugLog.children.length) { oDebugLog.insertBefore(el, oDebugLog.children[0]); } else { oDebugLog.appendChild(el); } document.getElementsByTagName("body")[0].appendChild(oDebugLog); } }/**********************************************************************************//*********************************** 原生约定的核心方法 *****************************//**********************************************************************************/var nativebridge; function nativeBridgeInit(method){ log("nativeBridgeInit: 1"); connectWebViewJavascriptBridge(function(bridge) { log("nativeBridgeInit: 2", bridge); //创建桥梁并带初始化参数 nativebridge = bridge; bridge.init(function(nativeResponse, responseCallback) { log("nativeBridgeInit: 3", nativeResponse); // 执行回调函数 method(nativeResponse); log("nativeBridgeInit: 4"); if(nativeResponse.ret==1){ // 响应native(native通过该参数判断web是否成功接收到native发送的参数) var responseToNative = "{\"ret\":\"1\",\"message\":\"success\"}"; responseCallback(responseToNative); } log("nativeBridgeInit: 5"); }); })}function connectWebViewJavascriptBridge(callback) { log("connectWebViewJavascriptBridge: 1"); if (window.WebViewJavascriptBridge) { log("connectWebViewJavascriptBridge: 2"); callback(WebViewJavascriptBridge); } else { log("connectWebViewJavascriptBridge: 3"); document.addEventListener('WebViewJavascriptBridgeReady', function() { log("connectWebViewJavascriptBridge: 4"); callback(WebViewJavascriptBridge); log("connectWebViewJavascriptBridge: 5"); }, false); log("connectWebViewJavascriptBridge: 6"); } }function nativebridgeRegisterHandler(methodName,callbackMethod){ log("nativebridgeRegisterHandler: 1"); nativebridge.registerHandler(methodName,callbackMethod) log("nativebridgeRegisterHandler: 2");}
调用函数
// 初始化本地接口连接nativeBridgeInit();//PhotoBrowser是与App端约定的方法名。imageURL是key值,url是传向App端的参数,nativeResponse是返回的回调函数值。function PhotoBrowser(url){ nativebridge.callHandler('PhotoBrowser',{'imageURL': url }, function(nativeResponse){ })}
0 0
- 初识移动端跨平台(JavaScript篇)
- 跨平台移动端开发 NativeScript ——创建JavaScript原生移动应用
- 初识JavaScript(基础篇)
- 初识JavaScript(基础篇)
- 移动端性能测试--初识篇
- 移动端跨平台框架
- 初识跨平台
- 聊聊移动端跨平台开发(后续)
- HybridAPP框架MUI(跨平台移动端应用开发)
- JavaScript(1)初识
- 初识JavaScript(1)
- 跨平台APP开发初识
- nginx平台初识(一)
- 跨平台移动开发实战(九)------移动端本地存储方案
- 跨平台移动开发实战(九)------移动端本地存储方案
- Titanium跨平台的移动端技术
- 移动端跨平台框架分析
- 聊聊移动端跨平台数据库 Realm
- OC基础笔记
- redis php admin
- netty TCP server心跳机制
- ffmpeg 使用滤镜
- 在 XML 中通过数据绑定用一行代码定制字体
- 初识移动端跨平台(JavaScript篇)
- Dubbo架构设计详解
- 教主Baby大婚能收多少份子钱?
- Reading and Writing using a Large Random Access File
- 高度平衡
- 成为核心程序员的一些建议
- 如何在lua中打印一个数组(table)
- PHP CLI 模式详解
- nodeJs mongodb凭据验证