• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

uni-app支付宝小程序内嵌webview通信uni-app H5项目的解决方案

武飞扬头像
shmilynn_
帮助1

需求前提:

我们在uniapp小程序中内嵌了web-view的一个h5的页面,当点击h5中某个按钮的时候,需要传递参数数据在小程序中接收到,下面是实现方法

在项目h5中的配置如下:

因为uni官方文档对于webview通信的应用是在原生h5中进行的

所以我们在h5项目文件中新建一个html页面,并且在manifest.json中的web配置中应用该html学新通

 shops.html页面代码如下(注意需要使用我代码中的html结构,否则可能导致样式丢失的问题

不管是不是uni项目h5中都需要引入uni的SDK。

<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>

  1.  
    <!DOCTYPE html>
  2.  
    <html lang="zh-CN">
  3.  
    <head>
  4.  
    <meta charset="utf-8">
  5.  
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.  
    <title>
  7.  
    <%= htmlWebpackPlugin.options.title %>
  8.  
    </title>
  9.  
    <!-- Open Graph data -->
  10.  
    <!-- <meta property="og:title" content="Title Here" /> -->
  11.  
    <!-- <meta property="og:url" content="http://www.example.com/" /> -->
  12.  
    <!-- <meta property="og:image" content="http://example.com/image.jpg" /> -->
  13.  
    <!-- <meta property="og:description" content="Description Here" /> -->
  14.  
    <script>
  15.  
    var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS
  16.  
    .supports(
  17.  
    'top: constant(a)'))
  18.  
    document.write(
  19.  
    '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0'
  20.  
    (coverSupport ? ', viewport-fit=cover' : '') '" />')
  21.  
    </script>
  22.  
    <link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
  23.  
    </head>
  24.  
    <body>
  25.  
    <noscript>
  26.  
    <strong>Please enable JavaScript to continue.</strong>
  27.  
    </noscript>
  28.  
    <div id="app"></div>
  29.  
    <!-- built files will be auto injected -->
  30.  
    </body>
  31.  
    <script type="text/javascript">
  32.  
    var userAgent = navigator.userAgent;
  33.  
    if (userAgent.indexOf('AlipayClient') > -1) {
  34.  
    // 支付宝小程序的 JS-SDK 防止 404 需要动态加载,如果不需要兼容支付宝小程序,则无需引用此 JS 文件。
  35.  
    document.writeln('<script src="https://appx/web-view.min.js"' '>' '<' '/' 'script>');
  36.  
    }
  37.  
    </script>
  38.  
    <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
  39.  
    <script type="text/javascript">
  40.  
    // 待触发 `UniAppJSBridgeReady` 事件后,即可调用 uni 的 API。
  41.  
    document.addEventListener('UniAppJSBridgeReady', function() {
  42.  
     
  43.  
    uni.webView.getEnv(function(res) {
  44.  
    console.log('当前环境:' JSON.stringify(res));
  45.  
    });
  46.  
    });
  47.  
    </script>
  48.  
    </html>
学新通

我们修改了默认模版需要重新跑一下项目,跑完之后若log出当前环境,则说明uni引入成功,

学新通

 然后我们只需要的页面调用api进行参数传递就可以了

(注意官方文档是错误写法,我们需要调用uni.webView方法)

  1.  
    uni.webView.postMessage({
  2.  
    data: {
  3.  
    action: '点击了H5传递的数据'
  4.  
    }
  5.  
    })

比如我在项目中@click点击事件触发payfn方法进行参数传递支付宝小程序

学新通

 到此为止h5的前置引入已经完成,下面是支付宝小程序的写法

在这个部分我们可以按照官网的写法,只需要监听message事件就可以了,支付宝代码如图所示

学新通

  1.  
    <template>
  2.  
    <view>
  3.  
    <web-view :src="url" @message="message"></web-view>
  4.  
    </view>
  5.  
    </template>
  6.  
     
  7.  
    <script>
  8.  
    export default {
  9.  
    data() {
  10.  
    return {
  11.  
    url: 'http://localhost:8080/#/'
  12.  
    }
  13.  
    },
  14.  
    methods: {
  15.  
    //h5传惨监听事件
  16.  
    message(e) {
  17.  
    console.log(e.detail.data);
  18.  
     
  19.  
    },
  20.  
    },
  21.  
    }
  22.  
    </script>
学新通

学新通

此时我们就可以拿到h5传递回的数据进行逻辑的编写了。

在测试的时候我们可以关闭支付宝对于webview和域名的校验,这样只需要跑一下内置的服务就可以了。生产的时候需要配置好域名对应。

学新通

 学新通

至于支付宝小程序webview向h5传参比较简单

只需要在路径中拼接参数,在h5中onload生命周期钩子中就可以拿到了。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfahbb
系列文章
更多 icon
同类精品
更多 icon
继续加载