dcloudio / uni-app

A cross-platform framework using Vue.js
https://uniapp.dcloud.io
Apache License 2.0
40.1k stars 3.63k forks source link

能不能提供web-view和uni之间的即时通信功能? #1221

Closed wh521518 closed 4 years ago

wh521518 commented 4 years ago

新功能描述 现有的uni.webview.1.5.2.js,的postMessage方法会在特定的时机触发,能不能增加为即时触发!

现状及问题 比如web-view中有时会要手动实现全屏功能。但是web-view的大小是固定的,导航栏无法及时隐藏!

Wangyaqi commented 4 years ago

现在就是即时的,更新HBuilderX验证

wh521518 commented 4 years ago

现在就是即时的,更新HBuilderX验证

emmm 我用的官方的那个demo,能够输出环境信息,但是无法触发postmessage的消息。还有我想问,能不能手动触发postmessage!

*.vue

<template>  
    <view>  
        <web-view src="/hybrid/html/new.html" @message="handleMessage"></web-view>  
    </view>  
</template>  

<script>  
export default {
  data() {
    return {};
  },
  methods: {
    handleMessage(evt) {
      console.log('接收到的消息:' + JSON.stringify(evt.detail.data));
    }
  }
};
</script>

new.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
  </head>
  <body>
    <div>测试
      <button onclick="sendTMMsg()">触发message</button>
    </div>
    <!-- uniapp -->
    <script>
      document.addEventListener('UniAppJSBridgeReady', function() {
        uni.postMessage({
          data: {
            action: 'message'
          }
        });
        uni.getEnv(function(res) {
          console.log('当前环境:' + JSON.stringify(res));
        });
      });

      function sendTMMsg() {
        console.log('我发送了消息');
        uni.postMessage({
          data: {
            action: 'message'
          }
        });
      }
    </script>

    <script type="text/javascript">
      var userAgent = navigator.userAgent;
      if (userAgent.indexOf('AlipayClient') > -1) {
        // 支付宝小程序的 JS-SDK 防止 404 需要动态加载,如果不需要兼容支付宝小程序,则无需引用此 JS 文件。
        document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>');
      } else if (/QQ/i.test(userAgent) && /miniProgram/i.test(userAgent)) {
        // QQ 小程序
        document.write(
          '<script type="text/javascript" src="https://qqq.gtimg.cn/miniprogram/webview_jssdk/qqjssdk-1.0.0.js"><\/script>'
        );
      } else if (/miniProgram/i.test(userAgent)) {
        // 微信小程序 JS-SDK 如果不需要兼容微信小程序,则无需引用此 JS 文件。
        document.write('<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"><\/script>');
      } else if (/toutiaomicroapp/i.test(userAgent)) {
        // 头条小程序 JS-SDK 如果不需要兼容头条小程序,则无需引用此 JS 文件。
        document.write(
          '<script type="text/javascript" src="https://s3.pstatp.com/toutiao/tmajssdk/jssdk-1.0.1.js"><\/script>');
      } else if (/swan/i.test(userAgent)) {
        // 百度小程序 JS-SDK 如果不需要兼容百度小程序,则无需引用此 JS 文件。
        document.write(
          '<script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.18.js"><\/script>'
        );
      }
    </script>
    <!-- uni 的 SDK -->
    <script type="text/javascript" src="./js/uni.webview.1.5.2.js"></script>
    <!-- uniapp -->
  </body>
</html>
Wangyaqi commented 4 years ago

HBuilderX版本多少?

wh521518 commented 4 years ago

2.5.1.20200103

dcloudhdx commented 4 years ago

app-vue 需要开启V3编译 见:manifest.json app-nvue 支持