本编文章 uniappAPP与uniappH5是两个独立的项目,都是可以单独登录访问,在app中嵌套H5项目,需要在H5项目中获取app项目的登录信息,可以直接获取登录人信息,进而可以直接访问。
一、在app中利用web-view嵌入H5页面(只要在网址上面携带参数就可以):
app中:需要将用户验签利用的token作为参数传入到H5项目中
- <template>
- <view class="box" style="padding-top: 100px;">
- <web-view :src="wholeSrc" @message="getMessage"></web-view>
- </view>
- </template>
- <script>
- export default {
- data() {
- return {
- wholeSrc:'',
- token:''
- }
- },
- mounted() {
- this.token = uni.getStorageSync('token')
- this.wholeSrc = '地址?token=' + this.token
- },
- onLoad() {
- if (window) {
- window.addEventListener('message', (e) => {
- //可以通过e里面的参数 orgin判断是否是要嵌入的h5 (判断一下来源安全一些)
- console.log(e.data, 'h5传过来的')
- })
- }
- },
- methods: {
- getMessage(value){
- console.log(value ,'value','getMessage里面的值')
- }
- }
- }
- </script>
复制代码 二、H5页面(吸取app中所携带的参数):
1、首先需要再H5项目下载webview.js文件,在main.js中引入(uni.webview.1.5.2.js)
- !(function (e, n) {
- 'object' == typeof exports && 'undefined' != typeof module
- ? (module.exports = n())
- : 'function' == typeof define && define.amd
- ? define(n)
- : ((e = e || self).uni = n())
- })(this, function () {
- 'use strict'
- try {
- var e = {}
- Object.defineProperty(e, 'passive', {
- get: function () {
- !0
- },
- }),
- window.addEventListener('test-passive', null, e)
- } catch (e) {}
- var n = Object.prototype.hasOwnProperty
- function t(e, t) {
- return n.call(e, t)
- }
- var i = [],
- a = function (e, n) {
- var t = { options: { timestamp: +new Date() }, name: e, arg: n }
- if (window.__dcloud_weex_postMessage || window.__dcloud_weex_) {
- if ('postMessage' === e) {
- var a = { data: [n] }
- return window.__dcloud_weex_postMessage
- ? window.__dcloud_weex_postMessage(a)
- : window.__dcloud_weex_.postMessage(JSON.stringify(a))
- }
- var o = {
- type: 'WEB_INVOKE_APPSERVICE',
- args: { data: t, webviewIds: i },
- }
- window.__dcloud_weex_postMessage
- ? window.__dcloud_weex_postMessageToService(o)
- : window.__dcloud_weex_.postMessageToService(JSON.stringify(o))
- }
- if (!window.plus)
- return window.parent.postMessage(
- { type: 'WEB_INVOKE_APPSERVICE', data: t, pageId: '' },
- '*'
- )
- if (0 === i.length) {
- var r = plus.webview.currentWebview()
- if (!r) throw new Error('plus.webview.currentWebview() is undefined')
- var d = r.parent(),
- s = ''
- ;(s = d ? d.id : r.id), i.push(s)
- }
- if (plus.webview.getWebviewById('__uniapp__service'))
- plus.webview.postMessageToUniNView(
- { type: 'WEB_INVOKE_APPSERVICE', args: { data: t, webviewIds: i } },
- '__uniapp__service'
- )
- else {
- var w = JSON.stringify(t)
- plus.webview
- .getLaunchWebview()
- .evalJS(
- 'UniPlusBridge.subscribeHandler("'
- .concat('WEB_INVOKE_APPSERVICE', '",')
- .concat(w, ',')
- .concat(JSON.stringify(i), ');')
- )
- }
- },
- o = {
- navigateTo: function () {
- var e =
- arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
- n = e.url
- a('navigateTo', { url: encodeURI(n) })
- },
- navigateBack: function () {
- var e =
- arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
- n = e.delta
- a('navigateBack', { delta: parseInt(n) || 1 })
- },
- switchTab: function () {
- var e =
- arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
- n = e.url
- a('switchTab', { url: encodeURI(n) })
- },
- reLaunch: function () {
- var e =
- arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
- n = e.url
- a('reLaunch', { url: encodeURI(n) })
- },
- redirectTo: function () {
- var e =
- arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
- n = e.url
- a('redirectTo', { url: encodeURI(n) })
- },
- getEnv: function (e) {
- window.plus ? e({ plus: !0 }) : e({ h5: !0 })
- },
- postMessage: function () {
- var e =
- arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}
- a('postMessage', e.data || {})
- },
- },
- r = /uni-app/i.test(navigator.userAgent),
- d = /Html5Plus/i.test(navigator.userAgent),
- s = /complete|loaded|interactive/
- var w = window.my && navigator.userAgent.indexOf('AlipayClient') > -1
- var u =
- window.swan && window.swan.webView && /swan/i.test(navigator.userAgent)
- var c =
- window.qq &&
- window.qq.miniProgram &&
- /QQ/i.test(navigator.userAgent) &&
- /miniProgram/i.test(navigator.userAgent)
- var g =
- window.tt &&
- window.tt.miniProgram &&
- /toutiaomicroapp/i.test(navigator.userAgent)
- var v =
- window.wx &&
- window.wx.miniProgram &&
- /micromessenger/i.test(navigator.userAgent) &&
- /miniProgram/i.test(navigator.userAgent)
- var p = window.qa && /quickapp/i.test(navigator.userAgent)
- for (
- var l,
- _ = function () {
- ;(window.UniAppJSBridge = !0),
- document.dispatchEvent(
- new CustomEvent('UniAppJSBridgeReady', {
- bubbles: !0,
- cancelable: !0,
- })
- )
- },
- f = [
- function (e) {
- if (r || d)
- return (
- window.__dcloud_weex_postMessage || window.__dcloud_weex_
- ? document.addEventListener('DOMContentLoaded', e)
- : window.plus && s.test(document.readyState)
- ? setTimeout(e, 0)
- : document.addEventListener('plusready', e),
- o
- )
- },
- function (e) {
- if (v)
- return (
- window.WeixinJSBridge && window.WeixinJSBridge.invoke
- ? setTimeout(e, 0)
- : document.addEventListener('WeixinJSBridgeReady', e),
- window.wx.miniProgram
- )
- },
- function (e) {
- if (c)
- return (
- window.QQJSBridge && window.QQJSBridge.invoke
- ? setTimeout(e, 0)
- : document.addEventListener('QQJSBridgeReady', e),
- window.qq.miniProgram
- )
- },
- function (e) {
- if (w) {
- document.addEventListener('DOMContentLoaded', e)
- var n = window.my
- return {
- navigateTo: n.navigateTo,
- navigateBack: n.navigateBack,
- switchTab: n.switchTab,
- reLaunch: n.reLaunch,
- redirectTo: n.redirectTo,
- postMessage: n.postMessage,
- getEnv: n.getEnv,
- }
- }
- },
- function (e) {
- if (u)
- return (
- document.addEventListener('DOMContentLoaded', e),
- window.swan.webView
- )
- },
- function (e) {
- if (g)
- return (
- document.addEventListener('DOMContentLoaded', e),
- window.tt.miniProgram
- )
- },
- function (e) {
- if (p) {
- window.QaJSBridge && window.QaJSBridge.invoke
- ? setTimeout(e, 0)
- : document.addEventListener('QaJSBridgeReady', e)
- var n = window.qa
- return {
- navigateTo: n.navigateTo,
- navigateBack: n.navigateBack,
- switchTab: n.switchTab,
- reLaunch: n.reLaunch,
- redirectTo: n.redirectTo,
- postMessage: n.postMessage,
- getEnv: n.getEnv,
- }
- }
- },
- function (e) {
- return document.addEventListener('DOMContentLoaded', e), o
- },
- ],
- m = 0;
- m < f.length && !(l = f[m](_));
- m++
- );
- l || (l = {})
- var E = 'undefined' != typeof uni ? uni : {}
- if (!E.navigateTo) for (var b in l) t(l, b) && (E[b] = l[b])
- return (E.webView = l), E
- })
复制代码 在main.js中引入
- //main.js引入
- import uniview from '@/utils/uni.webview.1.5.2.js'
- //挂载到全局实例上面
- // web-view SDK
- Vue.prototype.uniview = uniview
复制代码 在哀求拦截器内里添加获取用户登录验签的token,否则需要重新登岸H5项目获取当前项目的验签
- if(window.location.href.indexOf("?") !== -1){
- if(window.location.href.split('?')[1].split('&')[0].split('=')[1]){
- let token=window.location.href.split('?')[1].split('&')[0].split('=')[1]
- uni.setStorage({
- key: 'access-token',
- data: token
- })
- document.cookie = 'token=' + token
- }
- }
复制代码 此时就可以获取到app项目中登录人的信息,不需要重新登录
在H5跳转的谁人页面可以通过onload获取app携带的参数
- //h5页面接收
- onLoad(options){
- if(options && options.token){
- uni.setStorage({
- key: 'access-token',
- data: options.token
- })
- uni.getStorage({
- key: 'access-token',
- success: (res) => {
- console.log(res.data,'tempToken')
- }
- })
- }
复制代码 h5页面向app项目传参
- //h5页面向app页面传参
- this.uniview.webView.postMessage({
- data: {
- type: 'pay_copy',
- message: 'h5传过去的参数我是 镜像报表中的参数88888888!',
- },
- })
复制代码 如果利用了自界说导航,可以利用webview中的返回方法
- this.uniview.webView.navigateBack({
- delta: 1
- })
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |