按照:https://uniapp.dcloud.net.cn/component/web-view.html
App 端使用 uni.web-view.js 的最低版为 uni.webview.1.5.4.js
因本身是uniapp应用,window.uni里已经存在原来框架uni,导致无法覆盖或添加js里的方法。
比较简单的方法是修改uni.webview.1.5.4.js源代码,直接给window.uni2(名称自定)对象赋值,使用时windwo.uni2.postMessage即可,与原有的window.uni不冲突。
!function(e, n) {
"object" == typeof exports && "undefined" != typeof module
? module.exports = n()
: "function" == typeof define && define.amd
? define(n)
: (e = e || self).uni2 = n(); // 👈 关键:改为 uni2
}(this, function() {
"use strict";
try {
var e = {};
Object.defineProperty(e, "passive", { get: function() { return !0; } });
window.addEventListener("test-passive", null, e);
} catch (e) {}
var n = Object.prototype.hasOwnProperty;
function i(e, i) { return n.call(e, i); }
var t = [];
function r() {
return window.__dcloud_weex_postMessage || window.__dcloud_weex_;
}
var o = function(e, n) {
var i = { options: { timestamp: +new Date }, name: e, arg: n };
if (r()) {
if ("postMessage" === e) {
var o = { data: [n] };
return window.__dcloud_weex_postMessage
? window.__dcloud_weex_postMessage(o)
: window.__dcloud_weex_.postMessage(JSON.stringify(o));
}
var a = { type: "WEB_INVOKE_APPSERVICE", args: { data: i, webviewIds: t } };
window.__dcloud_weex_postMessage
? window.__dcloud_weex_postMessageToService(a)
: window.__dcloud_weex_.postMessageToService(JSON.stringify(a));
}
if (!window.plus)
return window.parent.postMessage({ type: "WEB_INVOKE_APPSERVICE", data: i, pageId: "" }, "*");
if (0 === t.length) {
var d = plus.webview.currentWebview();
if (!d) throw new Error("plus.webview.currentWebview() is undefined");
var s = d.parent(), w = "";
w = s ? s.id : d.id;
t.push(w);
}
if (plus.webview.getWebviewById("__uniapp__service"))
plus.webview.postMessageToUniNView(
{ type: "WEB_INVOKE_APPSERVICE", args: { data: i, webviewIds: t } },
"__uniapp__service"
);
else {
var u = JSON.stringify(i);
plus.webview.getLaunchWebview().evalJS(
'UniPlusBridge.subscribeHandler("' +
"WEB_INVOKE_APPSERVICE" +
'",' +
u +
"," +
JSON.stringify(t) +
");"
);
}
};
var a = {
navigateTo: function() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
n = e.url;
o("navigateTo", { url: encodeURI(n) });
},
navigateBack: function() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
n = e.delta;
o("navigateBack", { delta: parseInt(n) || 1 });
},
switchTab: function() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
n = e.url;
o("switchTab", { url: encodeURI(n) });
},
reLaunch: function() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
n = e.url;
o("reLaunch", { url: encodeURI(n) });
},
redirectTo: function() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
n = e.url;
o("redirectTo", { url: encodeURI(n) });
},
getEnv: function(e) {
r() ? e({ nvue: !0 }) : window.plus ? e({ plus: !0 }) : e({ h5: !0 });
},
postMessage: function() {
var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
o("postMessage", e.data || {});
}
};
var d = /uni-app/i.test(navigator.userAgent),
s = /Html5Plus/i.test(navigator.userAgent),
w = /complete|loaded|interactive/;
var u =
window.my &&
navigator.userAgent.indexOf(["t", "n", "e", "i", "l", "C", "y", "a", "p", "i", "l", "A"].reverse().join("")) > -1;
var g = window.swan && window.swan.webView && /swan/i.test(navigator.userAgent);
var v =
window.qq &&
window.qq.miniProgram &&
/QQ/i.test(navigator.userAgent) &&
/miniProgram/i.test(navigator.userAgent);
var c = window.tt && window.tt.miniProgram && /toutiaomicroapp/i.test(navigator.userAgent);
var m =
window.wx &&
window.wx.miniProgram &&
/micromessenger/i.test(navigator.userAgent) &&
/miniProgram/i.test(navigator.userAgent);
var p = window.qa && /quickapp/i.test(navigator.userAgent);
var f =
window.ks &&
window.ks.miniProgram &&
/micromessenger/i.test(navigator.userAgent) &&
/miniProgram/i.test(navigator.userAgent);
var l = window.tt && window.tt.miniProgram && /Lark|Feishu/i.test(navigator.userAgent);
var _ =
window.jd &&
window.jd.miniProgram &&
/micromessenger/i.test(navigator.userAgent) &&
/miniProgram/i.test(navigator.userAgent);
var E = window.xhs && window.xhs.miniProgram && /xhsminiapp/i.test(navigator.userAgent);
for (
var h,
P = function() {
window.UniAppJSBridge = !0;
document.dispatchEvent(
new CustomEvent("UniAppJSBridgeReady", { bubbles: !0, cancelable: !0 })
);
},
b = [
function(e) {
if (d || s)
return window.__dcloud_weex_postMessage || window.__dcloud_weex_
? document.addEventListener("DOMContentLoaded", e)
: window.plus && w.test(document.readyState)
? setTimeout(e, 0)
: document.addEventListener("plusready", e), a;
},
function(e) {
if (m)
return window.WeixinJSBridge && window.WeixinJSBridge.invoke
? setTimeout(e, 0)
: document.addEventListener("WeixinJSBridgeReady", e), window.wx.miniProgram;
},
function(e) {
if (v)
return window.QQJSBridge && window.QQJSBridge.invoke
? setTimeout(e, 0)
: document.addEventListener("QQJSBridgeReady", e), window.qq.miniProgram;
},
function(e) {
if (u) {
document.addEventListener("DOMContentLoaded", e);
var n = window.my;
return {
navigateTo: n.navigateTo,
navigateBack: n.navigateBack,
switchTab: n.switchTab,
reLaunch: n.reLaunch,
redirectTo: n.redirectTo,
postMessage: n.postMessage,
getEnv: n.getEnv
};
}
},
function(e) {
if (g) return document.addEventListener("DOMContentLoaded", e), window.swan.webView;
},
function(e) {
if (c) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram;
},
function(e) {
if (p) {
window.QaJSBridge && window.QaJSBridge.invoke
? setTimeout(e, 0)
: document.addEventListener("QaJSBridgeReady", e);
var n = window.qa;
return {
navigateTo: n.navigateTo,
navigateBack: n.navigateBack,
switchTab: n.switchTab,
reLaunch: n.reLaunch,
redirectTo: n.redirectTo,
postMessage: n.postMessage,
getEnv: n.getEnv
};
}
},
function(e) {
if (f)
return window.WeixinJSBridge && window.WeixinJSBridge.invoke
? setTimeout(e, 0)
: document.addEventListener("WeixinJSBridgeReady", e), window.ks.miniProgram;
},
function(e) {
if (l) return document.addEventListener("DOMContentLoaded", e), window.tt.miniProgram;
},
function(e) {
if (_)
return window.JDJSBridgeReady && window.JDJSBridgeReady.invoke
? setTimeout(e, 0)
: document.addEventListener("JDJSBridgeReady", e), window.jd.miniProgram;
},
function(e) {
if (E) return window.xhs.miniProgram;
},
function(e) {
return document.addEventListener("DOMContentLoaded", e), a;
}
],
y = 0;
y < b.length && !(h = b[y](P));
y++
);
h || (h = {});
// 👇 关键修改:不再读取或合并 window.uni,而是创建全新对象
var B = {}; // 不再引用原有 uni
for (var S in h) i(h, S) && (B[S] = h[S]);
B.webView = h;
return B; // 返回纯桥接对象
});