uni-app实现web-view和App之间的互相通信
<h4>1.web-view向App传递消息</h4><p>官网对于uni-app使用web-view的介绍如下:web-view</p>
<p><img src="https://img2024.cnblogs.com/blog/1086124/202407/1086124-20240717122656553-1238926745.png"></p>
<p> 注意事项提到postMessage方法,这就是web-view向App传递消息的方法,使用如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/1086124/202407/1086124-20240717122712475-969072306.png"></p>
<p> </p>
<p>注意H5本身不支持uni-app里面的方法,所以在项目中引入支持调用uni-app方法的库</p>
<p><img src="https://img2024.cnblogs.com/blog/1086124/202407/1086124-20240717122732611-427347274.png"></p>
<p> web-view页面使用:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">uni.postMessage({
data: {
action: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">click</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
}
});</span></pre>
</div>
<p>uni-app接受消息:</p>
<div class="cnblogs_code">
<pre>view>
<!--#ifdef APP-PLUS -->
<uni-status-bar></uni-status-bar>
<!--<span style="color: rgba(0, 0, 255, 1)">#endif</span> -->
<web-view @message=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">getMessage</span><span style="color: rgba(128, 0, 0, 1)">"</span> :src=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">webViewUrl</span><span style="color: rgba(128, 0, 0, 1)">"</span>></web-view>
</view><span style="color: rgba(0, 0, 0, 1)">
getMessage(e) {
console.log(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">webView传递过来的消息</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">const</span> action = e.detail.data[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">].action
}
</span><span style="color: rgba(0, 128, 0, 1)"><br></span></pre>
</div>
<p><span style="color: rgba(255, 0, 0, 1); font-size: 18pt"><strong>这种方法只能适用于H5不是UNI写的,如果是UNI写的会报错 </strong></span></p>
<pre><span>uni.postMessage 不是一个方法,原因在于 webview 的uni方法和dUni-app 的uni方法冲突了,解决办法,把js下载下来里面的方法明换掉;<br>例如:<br></span></pre>
<div class="cnblogs_code">
<pre>!<span style="color: rgba(0, 0, 0, 1)"> function (e, n) {
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">object</span><span style="color: rgba(128, 0, 0, 1)">"</span> == <span style="color: rgba(0, 0, 255, 1)">typeof</span> exports && <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">undefined</span><span style="color: rgba(128, 0, 0, 1)">"</span> != <span style="color: rgba(0, 0, 255, 1)">typeof</span> module ? module.exports = n() : <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">function</span><span style="color: rgba(128, 0, 0, 1)">"</span> == <span style="color: rgba(0, 0, 255, 1)">typeof</span> define && define.amd ? define(n) : (e = e || self).webUni =<span style="color: rgba(0, 0, 0, 1)"> n()
}(</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">, (function () {
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">use strict</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> e =<span style="color: rgba(0, 0, 0, 1)"> {};
Object.defineProperty(e, </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">passive</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, {
</span><span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)">: function () {
</span>!<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
}
}), window.addEventListener(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">test-passive</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">, e)
} </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (e) {}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> n =<span style="color: rgba(0, 0, 0, 1)"> Object.prototype.hasOwnProperty;
function t(e, t) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> n.call(e, t)
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> i =<span style="color: rgba(0, 0, 0, 1)"> [],
a </span>=<span style="color: rgba(0, 0, 0, 1)"> function (e, n) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> t =<span style="color: rgba(0, 0, 0, 1)"> {
options: {
timestamp: </span>+<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Date
},
name: e,
arg: n
};
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (window.__dcloud_weex_postMessage ||<span style="color: rgba(0, 0, 0, 1)"> window.__dcloud_weex_) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">postMessage</span><span style="color: rgba(128, 0, 0, 1)">"</span> ===<span style="color: rgba(0, 0, 0, 1)"> e) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> a =<span style="color: rgba(0, 0, 0, 1)"> {
data:
};
</span><span style="color: rgba(0, 0, 255, 1)">return</span> window.__dcloud_weex_postMessage ?<span style="color: rgba(0, 0, 0, 1)"> window.__dcloud_weex_postMessage(a) : window.__dcloud_weex_.postMessage(JSON.stringify(a))
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> o =<span style="color: rgba(0, 0, 0, 1)"> {
type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">WEB_INVOKE_APPSERVICE</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
args: {
data: t,
webviewIds: i
}
};
window.__dcloud_weex_postMessage </span>?<span style="color: rgba(0, 0, 0, 1)"> window.__dcloud_weex_postMessageToService(o) : window.__dcloud_weex_.postMessageToService(JSON.stringify(o))
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!window.plus) <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> window.parent.postMessage({
type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">WEB_INVOKE_APPSERVICE</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
data: t,
pageId: </span><span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">
}, </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">*</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (<span style="color: rgba(128, 0, 128, 1)">0</span> ===<span style="color: rgba(0, 0, 0, 1)"> i.length) {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> r =<span style="color: rgba(0, 0, 0, 1)"> plus.webview.currentWebview();
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!r) <span style="color: rgba(0, 0, 255, 1)">throw</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Error(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">plus.webview.currentWebview() is undefined</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> d =<span style="color: rgba(0, 0, 0, 1)"> r.parent(),
s </span>= <span style="color: rgba(128, 0, 0, 1)">""</span><span style="color: rgba(0, 0, 0, 1)">;
s </span>= d ?<span style="color: rgba(0, 0, 0, 1)"> d.id : r.id, i.push(s)
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (plus.webview.getWebviewById(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">__uniapp__service</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)) plus.webview.postMessageToUniNView({
type: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">WEB_INVOKE_APPSERVICE</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
args: {
data: t,
webviewIds: i
}
}, </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">__uniapp__service</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> w =<span style="color: rgba(0, 0, 0, 1)"> JSON.stringify(t);
plus.webview.getLaunchWebview().evalJS(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UniPlusBridge.subscribeHandler("</span><span style="color: rgba(128, 0, 0, 1)">'</span>.concat(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">WEB_INVOKE_APPSERVICE</span><span style="color: rgba(128, 0, 0, 1)">"</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">",</span><span style="color: rgba(128, 0, 0, 1)">'</span>).concat(w, <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">,</span><span style="color: rgba(128, 0, 0, 1)">"</span>).concat(JSON.stringify(i), <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">);</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">))
}
},
o </span>=<span style="color: rgba(0, 0, 0, 1)"> {
navigateTo: function () {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> e = arguments.length > <span style="color: rgba(128, 0, 128, 1)">0</span> && <span style="color: rgba(0, 0, 255, 1)">void</span> <span style="color: rgba(128, 0, 128, 1)">0</span> !== arguments[<span style="color: rgba(128, 0, 128, 1)">0</span>] ? arguments[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">] : {},
n </span>=<span style="color: rgba(0, 0, 0, 1)"> e.url;
a(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">navigateTo</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, {
url: encodeURI(n)
})
},
navigateBack: function () {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> e = arguments.length > <span style="color: rgba(128, 0, 128, 1)">0</span> && <span style="color: rgba(0, 0, 255, 1)">void</span> <span style="color: rgba(128, 0, 128, 1)">0</span> !== arguments[<span style="color: rgba(128, 0, 128, 1)">0</span>] ? arguments[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">] : {},
n </span>=<span style="color: rgba(0, 0, 0, 1)"> e.delta;
a(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">navigateBack</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, {
delta: parseInt(n) </span>|| <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
})
},
switchTab: function () {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> e = arguments.length > <span style="color: rgba(128, 0, 128, 1)">0</span> && <span style="color: rgba(0, 0, 255, 1)">void</span> <span style="color: rgba(128, 0, 128, 1)">0</span> !== arguments[<span style="color: rgba(128, 0, 128, 1)">0</span>] ? arguments[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">] : {},
n </span>=<span style="color: rgba(0, 0, 0, 1)"> e.url;
a(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">switchTab</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, {
url: encodeURI(n)
})
},
reLaunch: function () {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> e = arguments.length > <span style="color: rgba(128, 0, 128, 1)">0</span> && <span style="color: rgba(0, 0, 255, 1)">void</span> <span style="color: rgba(128, 0, 128, 1)">0</span> !== arguments[<span style="color: rgba(128, 0, 128, 1)">0</span>] ? arguments[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">] : {},
n </span>=<span style="color: rgba(0, 0, 0, 1)"> e.url;
a(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">reLaunch</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, {
url: encodeURI(n)
})
},
redirectTo: function () {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> e = arguments.length > <span style="color: rgba(128, 0, 128, 1)">0</span> && <span style="color: rgba(0, 0, 255, 1)">void</span> <span style="color: rgba(128, 0, 128, 1)">0</span> !== arguments[<span style="color: rgba(128, 0, 128, 1)">0</span>] ? arguments[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">] : {},
n </span>=<span style="color: rgba(0, 0, 0, 1)"> e.url;
a(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">redirectTo</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, {
url: encodeURI(n)
})
},
getEnv: function (e) {
window.plus </span>?<span style="color: rgba(0, 0, 0, 1)"> e({
plus: </span>!<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
}) : e({
h5: </span>!<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
})
},
postMessage: function () {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> e = arguments.length > <span style="color: rgba(128, 0, 128, 1)">0</span> && <span style="color: rgba(0, 0, 255, 1)">void</span> <span style="color: rgba(128, 0, 128, 1)">0</span> !== arguments[<span style="color: rgba(128, 0, 128, 1)">0</span>] ? arguments[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">] : {};
a(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">postMessage</span><span style="color: rgba(128, 0, 0, 1)">"</span>, e.data ||<span style="color: rgba(0, 0, 0, 1)"> {})
}
},
r </span>= /uni-app/<span style="color: rgba(0, 0, 0, 1)">i.test(navigator.userAgent),
d </span>= /Html5Plus/<span style="color: rgba(0, 0, 0, 1)">i.test(navigator.userAgent),
s </span>= /complete|loaded|interactive/<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> w = window.my && navigator.userAgent.indexOf(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">AlipayClient</span><span style="color: rgba(128, 0, 0, 1)">"</span>) > -<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> u = window.swan && window.swan.webView && /swan/<span style="color: rgba(0, 0, 0, 1)">i.test(navigator.userAgent);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> c = window.qq && window.qq.miniProgram && /QQ/i.test(navigator.userAgent) && /miniProgram/<span style="color: rgba(0, 0, 0, 1)">i.test(navigator.userAgent);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> g = window.tt && window.tt.miniProgram && /toutiaomicroapp/<span style="color: rgba(0, 0, 0, 1)">i.test(navigator.userAgent);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> v = window.wx && window.wx.miniProgram && /micromessenger/i.test(navigator.userAgent) && /miniProgram/<span style="color: rgba(0, 0, 0, 1)">i.test(navigator.userAgent);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> p = window.qa && /quickapp/<span style="color: rgba(0, 0, 0, 1)">i.test(navigator.userAgent);
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> l, _ =<span style="color: rgba(0, 0, 0, 1)"> function () {
window.UniAppJSBridge </span>= !<span style="color: rgba(128, 0, 128, 1)">0</span>, document.dispatchEvent(<span style="color: rgba(0, 0, 255, 1)">new</span> CustomEvent(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UniAppJSBridgeReady</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, {
bubbles: </span>!<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">,
cancelable: </span>!<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
}))
}, f </span>=<span style="color: rgba(0, 0, 0, 1)"> [function (e) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (r || d) <span style="color: rgba(0, 0, 255, 1)">return</span> window.__dcloud_weex_postMessage || window.__dcloud_weex_ ? document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DOMContentLoaded</span><span style="color: rgba(128, 0, 0, 1)">"</span>, e) : window.plus && s.test(document.readyState) ? setTimeout(e, <span style="color: rgba(128, 0, 128, 1)">0</span>) : document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">plusready</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e), o
}, function (e) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (v) <span style="color: rgba(0, 0, 255, 1)">return</span> window.WeixinJSBridge && window.WeixinJSBridge.invoke ? setTimeout(e, <span style="color: rgba(128, 0, 128, 1)">0</span>) : document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">WeixinJSBridgeReady</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e), window.wx.miniProgram
}, function (e) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (c) <span style="color: rgba(0, 0, 255, 1)">return</span> window.QQJSBridge && window.QQJSBridge.invoke ? setTimeout(e, <span style="color: rgba(128, 0, 128, 1)">0</span>) : document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">QQJSBridgeReady</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e), window.qq.miniProgram
}, function (e) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (w) {
document.addEventListener(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DOMContentLoaded</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> n =<span style="color: rgba(0, 0, 0, 1)"> window.my;
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
navigateTo: n.navigateTo,
navigateBack: n.navigateBack,
switchTab: n.switchTab,
reLaunch: n.reLaunch,
redirectTo: n.redirectTo,
postMessage: n.postMessage,
getEnv: n.getEnv
}
}
}, function (e) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (u) <span style="color: rgba(0, 0, 255, 1)">return</span> document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DOMContentLoaded</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e), window.swan.webView
}, function (e) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (g) <span style="color: rgba(0, 0, 255, 1)">return</span> document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DOMContentLoaded</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e), window.tt.miniProgram
}, function (e) {
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (p) {
window.QaJSBridge </span>&& window.QaJSBridge.invoke ? setTimeout(e, <span style="color: rgba(128, 0, 128, 1)">0</span>) : document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">QaJSBridgeReady</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> n =<span style="color: rgba(0, 0, 0, 1)"> window.qa;
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
navigateTo: n.navigateTo,
navigateBack: n.navigateBack,
switchTab: n.switchTab,
reLaunch: n.reLaunch,
redirectTo: n.redirectTo,
postMessage: n.postMessage,
getEnv: n.getEnv
}
}
}, function (e) {
</span><span style="color: rgba(0, 0, 255, 1)">return</span> document.addEventListener(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DOMContentLoaded</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">, e), o
}], m </span>= <span style="color: rgba(128, 0, 128, 1)">0</span>; m < f.length && !(l = f(_)); m++<span style="color: rgba(0, 0, 0, 1)">);
l </span>|| (l =<span style="color: rgba(0, 0, 0, 1)"> {});
</span><span style="color: rgba(0, 0, 255, 1)">var</span> E = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">undefined</span><span style="color: rgba(128, 0, 0, 1)">"</span> != <span style="color: rgba(0, 0, 255, 1)">typeof</span> webUni ?<span style="color: rgba(0, 0, 0, 1)"> webUni : {};
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">E.navigateTo)
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">var</span> b <span style="color: rgba(0, 0, 255, 1)">in</span> l) t(l, b) && (E =<span style="color: rgba(0, 0, 0, 1)"> l);
</span><span style="color: rgba(0, 0, 255, 1)">return</span> E.webView =<span style="color: rgba(0, 0, 0, 1)"> l, E
}));</span></pre>
</div>
<p>这里将Uni方法换位了webUni</p>
<p>调用</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">webUni.postMessage({
data: {
randstr: res.randstr,
ticket: res.ticket
}
});</span></pre>
</div>
<p> </p>
<pre><span><span style="color: rgba(255, 0, 0, 1); font-size: 18pt"><strong>还有一个问题,@message方法,如果有数据交互,关闭webview 之后,再进来之前的数据还是一直存在的<br>所以要在离开页面或者特定时间取消@message方法</strong></span><br>例如在webview关闭的时候取消 <br></span></pre>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 离开页面时清除监听</span>
<span style="color: rgba(0, 0, 0, 1)"> onHide() {
uni.removeEventListener(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">message</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.onMessage);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> this.listenMessage = false;</span>
},</pre>
</div>
<p> </p>
<pre><span> </span></pre>
</div>
<div id="MySignature" role="contentinfo">
浩楠哥<br><br>
来源:https://www.cnblogs.com/haonanZhang/p/18307054
頁:
[1]