app开发经常会内嵌h5页面,原生app与h5页面相互调用,完成数据传递。一套h5页面能多端运行,实现跨平台,这就是常见的Hybrid app(混合app)
WKWebView
通过 url 向 vue 传参
在原生WKWebView中加载URL时,以拼接方式向h5页面传参:
1 | let urlStr = "https://markmiao.com/app/request?data=123" |
vue中接收传递数据:
1 | this.data = this.$route.query.data |
也可以通过&
符号拼接多个参数传递:
1 | let urlStr = "https://markmiao.com/app/request?data=123&index=1" |
URL是有长度限制的,如果要传递的数据很多,可以采用evaluateJavaScript
,在原生中调用vue中的js方法传递数据。
evaluateJavaScript 向 vue 传参
evaluateJavaScript
接收的是一个字符串方法名,传参时需要将json对象的参数转为json字符串,用单引号包裹放到字符串方法中:
1 | let funStr = "vueFunctionStr('\(jsonStr)')" //vueFunctionStr是vue中的方法名,jsonStr是json字符串的传参 |
vue的方法接收数据:
1 | mounted () { // 在window中注册方法 |
vue 向 WKWebView传参
h5也可以通过调用原生方法传参,WKWebView
需要添加方法监听,vueFunction
是要监听的方法名。
在 WKScriptMessageHandler
方法中接收传参,message.name
是方法名,message.body
是传递参数:
1 | // 添加监听 |
在vue中通过window.webkit
调用原生方法,传参:
1 | if (window.webkit) { |
uni-app
uni-app是一款跨平台框架,可以以一套代码编译成iOS/Android/各种小程序,一套代码多端运行。
uni-app完全是vue的开发方式,API高度类似小程序,相比原生性能和拓展性都是问题。框架本身也存在一些bug,好在官方迭代很快。
通过 url 向 vue 传参
uni-app有web-view
组件,用来加载网页,可以通过src
的URL地址向vue传参:
1 | <web-view src="https://markmiao.com/app/request?data=123"></web-view> |
vue接收参数和上面一样,也是通过this.$route.query.data
vue 向 uni-app 传参
参考文章:在web-view加载的本地及远程HTML中调用uni的API及网页和vue页面通讯
vue 向 uni-app 传参需要引入uni-app提供的sdk,vue中只需要在public/index.html
文件中引入即可:
1 | <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.1.js?rev=1.0.0"></script> |
如果要兼容小程序,还需要引入微信js-sdk,如果引入需要在前面:
1 | <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> |
在vue中调用uni.postMessage
方法向uni-app传参:
1 | uni.postMessage({ |
在uni-app中的 getMessage
方法中得到传参:
1 | getMessage: function (e) { |