vue实现与安卓、IOS交互

方案背景

  • IOS用的是jsBridge插件实现调用、传参、回调的
  • 安卓是在window挂载方法和挂载回调的

IOS实现方案

  • 调用原生方法封装如下

function setupWebViewJavascriptBridge (callback) {
    if (window.WebViewJavascriptBridge) {
        return callback(window.WebViewJavascriptBridge)
    }
    if (window.WVJBCallbacks) {
        return window.WVJBCallbacks.push(callback)
    }
    window.WVJBCallbacks = [callback]
    let WVJBIframe = document.createElement(‘iframe‘)
    WVJBIframe.style.display = ‘none‘
    WVJBIframe.src = ‘https://__bridge_loaded__‘
    document.documentElement.appendChild(WVJBIframe)
    setTimeout(() => {
        document.documentElement.removeChild(WVJBIframe)
    }, 0)
}
function callhandler (name, data, callback) {
    setupWebViewJavascriptBridge(function (bridge) {
        bridge.callHandler(name, data, callback)
    })
}
  • 实际调用如下

callhandler(functionName: string, params: object, res => {})
  • 注册方法给原生

registerhandler (name, callback) {
    // 安卓
    window[name] = res => {
      let data = JSON.parse(res)
      callback(data)
    }
    // IOS
    setupWebViewJavascriptBridge(function (bridge) {
        bridge.registerHandler(name, function (data, responseCallback) {
            callback(data, responseCallback)
        })
    })
}

安卓实现方案

  • 调用原生方法

window.HTTP_TEST.functionName()
  • 定义回调方法/注册方法给原生

window[‘functionName‘] = res => {}

特殊说明

  1. 安卓在交互中的参数传递只能支持string类型,对象参数要转成string传递
  2. 因为安卓的回调方法名是固定的,同一方法同时请求两次以上时,有可能只得到一次回调。如果用随机数处理就会不断地在window上挂载新的函数,调用次数过多可能会出问题,所以目前是避免同时请求同一方法来解决的。如果有需求避免不了,那还是要用随机数解决。

来源:https://segmentfault.com/a/1190000016879200

原文地址:https://www.cnblogs.com/lovellll/p/10126110.html

时间: 2024-10-11 19:32:00

vue实现与安卓、IOS交互的相关文章

ios和安卓H5交互桥接

ios交互 demo1(摘自网络) 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"> 6 <

UNITY3D与iOS交互解决方案

原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 "授人以鱼,不如授人以渔",以UNITY3D调用iOS版的91SDK为例,利用C# / C / OBJ-C 交互原理,本文将详细介绍UNITY3D与iOS之间交互的解决方案. 首先,打开XCODE新建一个空项目,参照91SDK开发文档将91SDK引入并进行环境配置. 配置完毕后创建一个名为"LsSdkConector

js与ios交互,js示例

js与ios交互,js示例 js文件:coco3gNativeUser.js let c3_navtive_user = {}; (function(owner) { owner.temp = {}; //右上角按钮及事件 owner.__defineSetter__('right_button_item',function(item){ this._right_button_item = item; }); owner.__defineGetter__('right_button_item',

Unity3d与iOS交互开发——接入平台SDK必备技能

原地址:http://www.2cto.com/kf/201401/273337.html# 前言废话:开发手机游戏都知道,你要接入各种平台的SDK.那就需要Unity3d与iOS中Objective-C的函数有交互,所以你就需要用到如下内容: 一.Unity3d To iOS: 1.创建一个C#文件 SdkToIOS.cs 这是调用iOS函数的接口: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class SdkToIOS: Mo

安卓ios和angularjs相互调用解决首次调用ios传递标题失败的问题

1.angular 调用客户端方法放在 try catch中 try { js_invoke.showShareDialog(angular.toJson(obj));  // 在这里放客户端的方法即可 } catch(e) { console.log('Recommend share',obj); } 2.客户端调用angular的方法,注意方法需全局可以才能正常调用 在首页index.html中声明方法 var goBack = function() { return false }; 在具

U3D实现与iOS交互

原地址:http://502317120.blog.51cto.com/4062300/1077733 在开发中有很多情况下会用到U3D调用iOS中的函数. 例如在U3D中,我们需要调用到一个iOS 的函数,例如:广告插件.(都有现成的代码大家只需要调用下的那种.) 这个时候我们就需要在U3D中写一个方法.这个方法去调用iOS中的函数. U3D中写法如下: C#版: [DllImport("__Internal")] private static extern void _UseIOS

unity3d ios 交互

写这篇博文之前,我也为之忙活了半天,对于那些不熟悉oc的童鞋来说,非常有用,这里主要会讲到常用的通信机制.和一些关于IOS的代码讲解. 一下主要讲解使用unity3d调用IOS的界面浏览一张图片. 1.unity3d 与 IOS 的基本通信机制. 在C#脚本中,定义一个类,里面写入类似这样的 public static class PlatformNative{ [DllImport("__Internal")] private static extern void extern_lo

.net&#160;安卓IOS跨平台des加解密双向的(可以互相加解密)

1 #region 跨平台加解密(c# 安卓 IOS) 2 3 // public static string sKey = "12345678"; 4 5 // /// 6 7 // /// 解密 8 9 // /// 10 11 // /// 要解密的以Base64 12 13 // /// 密钥,且必须为8位 14 15 // /// 已解密的字符串 16 17 // public static string DesDecrypt(string pToDecrypt) 18 19

Thinkphp5新版聚合VIP影视APP源码 安卓/IOS苹果双端,非常棒的一款在线视频VIP解析

Thinkphp5新版聚合VIP影视APP源码 安卓/IOS苹果双端,非常棒的一款在线视频VIP解析APP,代理裂变版下载地址:Q1013175107这套系统,我是开发者,外面都是乐色,后门无数.不信可以找我测试,秒进后台.删库跑路最新更新日志用户注册可以去除短信注册或保留新用户点击观影区直接跳登录页(不会弹出会员已过期)增加了观看记录增加成10条解析,最新电影页可以在后台添加,美化直播大厅,美化会员中心,独家可以切换会员中心风格 本套源码特色一.此版本为原生双端APP:(安卓+苹果)二.后台支