Uniapp中App与H5交互

这篇具有很好参考价值的文章主要介绍了Uniapp中App与H5交互。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Uniapp开发的App要与Uniapp开发的H5进行交互 

Uniapp进行数据交互的话是使用了Unaipp官方文档当中的web-view,但是官方文档当中的说明也不是很通俗易懂,之后就去网上找了好久,也试了很多次,终于实现了App与H5的交互。

web-view

首先呢web-view是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面,nvue 使用需要手动指定宽高。在web-view中的src当中放入H5页面的链接即可。
各小程序平台,web-view 加载的 url 需要在后台配置域名白名单,包括内部再次 iframe 内嵌的其他 url 以下是官方文档当中的代码片段,官网链接:(web-view | uni-app官网 (dcloud.net.cn))

<template>
    <view>
        <web-view :webview-styles="webviewStyles" src="https://uniapp.dcloud.io/static/web-view.html"></web-view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                webviewStyles: {
                    progress: {
                        color: '#FF3333'
                    }
                }
            }
        }
    }
</script>

<style>

</style>
 

在Uniapp当中呢,uni.postMessage是用来接收H5传来的数据的,这个可以查看Uniapp官方文档自行解决,而在交互当中让我们为难的无非就是H5如何向App传递数据和接受App传来的数据以及App如何向H5传递数据

H5向App传递数据

在uniapp项目下的static中新建一个uni_webview.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当中全局引入这个js文件

import * as uni from '@/static/uni_webview.js'

document.addEventListener("UniAppJSBridgeReady", function(e) {
    console.log(e)
    Vue.prototype.myUni = uni
});

之后我们就可以在页面当中去使用它来实现数据交互了~

<template>
    <view>
            <button @click="post">H5向App传递数据</button>
    </view>
</template>

<script>
export default {
    data() {
        return {
                
               }
       },
           onLoad(){
               this.get()
           },
          methods:{
                post(){
                     this.myUni.webView.postMessage({
                          //data当中是H5向App的传递数据
                          data: {},
                   });
                    },
                    get(){
                        接收app传递来的数据
                window.postJS = function(msg) {
                                    //msg是App传递过来的数据
                                    console.log(msg)
                                }
                    }
        }
}
</script>

<style>

</style>  文章来源地址https://www.toymoban.com/news/detail-720607.html

到了这里,关于Uniapp中App与H5交互的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp app的webview与h5交互操作

    app里的webview与h5交互操作,需要在h5页面加点代码,然后才能执行app里的方法 官方地址 在nvue页面里才能实现与h5的交互,设置webview的高度

    2024年02月11日
    浏览(44)
  • uniapp webview h5和app交互通信传参

    app端,onPostMessage在nvue页面下接受参数,message在vue页面下接受参数 链接后拼接传参,只在一开始能传 方法传参 H5端,我这是用vue2写的 在index.html页面加上这个 在首页接受参数 往APP传参 接受APP的方法传参,变量跟data里面的变量绑定

    2024年02月15日
    浏览(91)
  • uniapp系列-超详细教你在uni-app+vue3里通过web-view组件传递信息打开H5页面写入localstorage并解决兼容性

    web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。 点击这里直达官网文档 点击这里下载我的代码demo 本文最下面还有一些 常见或者奇怪问题解决方案 哦~ 之前开发好的H5页面,不想重新开发,想要直接放进项目用

    2024年02月09日
    浏览(55)
  • uniapp使用uni.createInnerAudioContext()实现在app 小程序 h5有声书的播放

    实现效果展示功能带你包括: 章节,倒计时,上一章,下一章,播放,暂停,倍速: uniapp官方uni.createInnerAudioContext()的文档地址:官网文档参考地址 首先分步骤介绍功能: 章节(这个调取接口遍历数据就可以,弹出层的形式展示) 倒计时 上一章 下一章 播放 暂停 倍速 我这

    2024年02月11日
    浏览(49)
  • uni-app搭建h5项目

    一、 打开官方网站 https://uniapp.dcloud.net.cn/quickstart-cli.html 二、找到使用vue-cli命令行,按照文档上的步骤进行搭建 全局安装 vue-cli 搭建项目 可以根据命令行搭建,搭建vue2.0对应的是webpack, 也可以搭建vue3.0+vite,命令行下载不下来,直接访问高亮起来的 gitee 然后下载模板即可

    2024年02月22日
    浏览(73)
  • uni-app打开外部链接方式汇总(h5&app)

    问题描述 在应用中打开一个外部的html页面,即完整http链接的页面。h5通过window.open或是内嵌iframe基本都没有问题,本文主要针对app端的方法进行汇总,不涉及到小程序端。 方案1 使用uni-app的扩展组件 uni-link ,使用参考文档uni-app官网 该组件的行为是在app内打开外部浏览器,

    2024年02月01日
    浏览(44)
  • uni-app滚动分页 兼容(App 小程序 H5)

    因为手机端本身屏幕空间不大 所以大家一般都会选择用滚动分页 首先 我在根目录下创建了一个 api目录 下面创建了一个bookApi.js 其中写了一个请求函数 getBookList 根据当前页 page 和 每页展示多少条 pageSize 获取数据 那么 我的组件代码是这样的 首先 我们肯定要引入bookApi.js中的

    2024年02月16日
    浏览(57)
  • H5向uni-app小程序传递参数

    1.script src=\\\"https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js\\\"/script 本地下载包引入也可以。  2.传递参数。 3.接收参数。 @message=\\\"handleMessage\\\"   获取当前数据是一个数组,每次获取让数组长度-1就是你需要的数据。

    2024年02月13日
    浏览(52)
  • uni-app实现 app 小程序 手机端H5扫码功能

    首先 扫码这个功能小程序和App都是有现成的方法 但是H5是不行的 我们可以看这样一段代码 这里 我们用了条件编译 App和小程序中的代码是 一样的 他们都可以正常执行scanCode进行扫码 至于H5手机端界面 我用web-view套了个百度的链接进来 其实 大家可以参考我的文章 vue实现二维

    2024年02月11日
    浏览(58)
  • uni-app如何区分 app、h5、小程序代码; uni-app如何判断是android、ios、小程序

    uniapp是DCloud公司于2012年开始研发的能够一次代码开发,生成H5、小程序(微信、支付宝、百度、华为等)、APP等应用的技术的统称,开发工具是HBuilderX,功能非常强大,由此引申出许多技术社区与生态环境。 使用HBuilderX开发Uniapp程序的项目,用它生成多端应用,由于兼容各种

    2024年02月11日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包