uniapp app 小程序 h5 兼容 通讯解决方案

<template>
	<view class="video">
		<iframe  id="iframe"
		v-if="url"
		 :src="url"
		 :style="{
				width: '750rpx',
				height:$mHelper.getScrollHeight(311)+'px'
			}" frameborder="0"></iframe>
	
	</view>
</template>
<script module="iframe" lang="renderjs">
	let myChart
	export default {
		mounted() {
			this.init()

		},
		methods: {

		init(){
		window.addEventListener('message',  (event) =>{
	  console.log('Web收到iframe消息:', event.data);
	  if (event.data.type === 'imagePreviewEvent') {
        //getMessage methods 里面的方法
		  this.$ownerInstance.callMethod('getMessage', {
					 	urls:event.data.data.dataSource.map(item=>item.src),
								current:event.data.data.index
					 });
	
	  }
	});
		}
		},
	}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

html给原生安卓ios推送 uniapp不支持

	function getDeviceType() {
	  var userAgent = navigator.userAgent;
	  if (/Android/i.test(userAgent)) {
	    return "安卓";
	  } else if (/iPhone|iPad|iPod/i.test(userAgent)) {
	    return "iOS";
	  } else {
	    return "其他";
	  }
	}
	if(getDeviceType()=='安卓'){
		
		 palyAppJSBridge.postMessage(JSON.stringify(opt))
	}else{
		  window.webkit.messageHandlers.palyAppJSBridge.postMessage(opt)
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

​​iOS 兼容性问题​

​问题​​:

iOS 可能因安全策略阻止 iframe 加载非 HTTPS 内容或限制媒体播放。 ​### ​解决方案​​: 在 pages.json 中配置允许任意加载:

{
  "path": "pages/iframe",
  "style": {
    "app-plus": {
      "allowsInlineMediaPlayback": "YES" // 允许内联媒体播放
    }
  }
}
1
2
3
4
5
6
7
8

同时需在 iOS 项目中配置 NSAppTransportSecurity 允许 HTTP。