南暖孤舟 發表於 2024-7-17 12:31:00

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>&nbsp;注意事项提到postMessage方法,这就是web-view向App传递消息的方法,使用如下:</p>
<p><img src="https://img2024.cnblogs.com/blog/1086124/202407/1086124-20240717122712475-969072306.png"></p>
<p>&nbsp;</p>
<p>注意H5本身不支持uni-app里面的方法,所以在项目中引入支持调用uni-app方法的库</p>
<p><img src="https://img2024.cnblogs.com/blog/1086124/202407/1086124-20240717122732611-427347274.png"></p>
<p>&nbsp;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&gt;
    &lt;!--#ifdef APP-PLUS --&gt;
    &lt;uni-status-bar&gt;&lt;/uni-status-bar&gt;
    &lt;!--<span style="color: rgba(0, 0, 255, 1)">#endif</span> --&gt;
    &lt;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>&gt;&lt;/web-view&gt;
&lt;/view&gt;<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写的会报错&nbsp;&nbsp;</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 &amp;&amp; <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 &amp;&amp; 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 &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> &amp;&amp; <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 &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> &amp;&amp; <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 &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> &amp;&amp; <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 &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> &amp;&amp; <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 &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> &amp;&amp; <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 &gt; <span style="color: rgba(128, 0, 128, 1)">0</span> &amp;&amp; <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 &amp;&amp; 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>) &gt; -<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 &amp;&amp; window.swan.webView &amp;&amp; /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 &amp;&amp; window.qq.miniProgram &amp;&amp; /QQ/i.test(navigator.userAgent) &amp;&amp; /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 &amp;&amp; window.tt.miniProgram &amp;&amp; /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 &amp;&amp; window.wx.miniProgram &amp;&amp; /micromessenger/i.test(navigator.userAgent) &amp;&amp; /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 &amp;&amp; /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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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>&amp;&amp; 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 &lt; f.length &amp;&amp; !(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) &amp;&amp; (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>&nbsp;</p>
<pre><span><span style="color: rgba(255, 0, 0, 1); font-size: 18pt"><strong>还有一个问题,@message方法,如果有数据交互,关闭webview 之后,再进来之前的数据还是一直存在的<br>所以要在离开页面或者特定时间取消@message方法</strong></span><br>例如在webview关闭的时候取消&nbsp;<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>&nbsp;</p>
<pre><span>&nbsp;</span></pre>

</div>
<div id="MySignature" role="contentinfo">
    浩楠哥<br><br>
来源:https://www.cnblogs.com/haonanZhang/p/18307054
頁: [1]
查看完整版本: uni-app实现web-view和App之间的互相通信