最近有一個需求是在微信瀏覽器中禁止右上角分享,因為wx-js-sdk目前還沒通,所以只能用WeixinJSBridge來實作,最初邏輯是定義好禁止分享的方法后,初始化時呼叫即可,本地除錯也沒什么問題,但發到環境后發現了坑,,
1.首先發現ios和安卓偶爾會出現無效的情況,排查后發現是初始化中獲取WeixinJSBridge結果為undefined,隨后通過setInterval回圈獲取解決,保證呼叫具體方法時WeixinJSBridge存在即可,
2.第二個坑是iOS底部自帶history前進后退,不會重新加載頁面,所以跳轉其他頁面后,退回去分享就又出現了,,
這里本來是想監聽visibilitychange事件,在切換前后臺時呼叫具體方法,結果發現微信瀏覽器里不觸發,,百度后才知道微信中不存在標簽的概念(所以window.open無效),所以該方法永遠不會觸發,
之后換了一個方法監聽就好了,我用的是pageshow,每次展示頁面時觸發(用popstate監聽前進后退也可以)
具體代碼:
created(){
//判斷當前是否是微信環境,方法網上一大堆
if(isWexin()){
let that = this;
let WeixinJSBridge = _.get(window,'WeixinJSBridge',undefined)
if(_rules.IsNull(WeixinJSBridge)){
//首次獲取WeixinJSBridge失敗,開始回圈獲取
let getJSbrige = setInterval(() => {
WeixinJSBridge = _.get(window,'WeixinJSBridge',undefined)
if(WeixinJSBridge!==undefined){
//獲取WeixinJSBridge成功,呼叫具體方法
that.disableShare()
//監聽pageshow,呼叫具體方法
window.addEventListener("pageshow", ()=>{
that.disableShare()
})
//停止回圈
clearInterval(getJSbrige)
}
}, 100);
}else{
//首次獲取WeixinJSBridge成功,邏輯一樣
that.disableShare()
window.addEventListener("pageshow", ()=>{
that.disableShare()
})
}
}
}
methods: {
//禁止微信右上角分享
disableShare() {
var that = this;
try {
//禁止分享
if (typeof WeixinJSBridge == "undefined") {
if (document.addEventListener) {
document.addEventListener(
"WeixinJSBridgeReady",
that.onBridgeReady(),
false
);
} else if (document.attachEvent) {
document.attachEvent("WeixinJSBridgeReady", that.onBridgeReady());
document.attachEvent("onWeixinJSBridgeReady", that.onBridgeReady());
}
} else {
//微信環境下做的處理
that.onBridgeReady();
}
} catch (error) {
console.log("禁止分享hideOptionMenu", error.message);
}
},
onBridgeReady: function () {
console.log('隱藏分享選單')
WeixinJSBridge.call("hideOptionMenu");
},
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/225883.html
標籤:其他
