鍍金池/ 問答/HTML5  HTML/ 微信支付完成后,返回到完成頁面,會有幾率出現(xiàn)無法顯示內(nèi)容的情況(空白頁)

微信支付完成后,返回到完成頁面,會有幾率出現(xiàn)無法顯示內(nèi)容的情況(空白頁)

問題如題:具體場景描述:掃碼,支付,完成后跳轉(zhuǎn)到完成頁面,完成頁面上有付款價格,商鋪,以及優(yōu)惠券信息??偟膩碚f頁面信息不多,代碼流程也不復(fù)雜,只是一個展示頁面。但是在ios下會有一定幾率出現(xiàn)頁面空白的情況,測試大概計算了一下,10次有1~2次的頻率出現(xiàn)(特別是退出微信重新登陸了后)。出問題后復(fù)制鏈接,重新打開每次就又都正常

遇見這個問題很詭異,完全蒙了。剛開始以為是頁面報錯了(這玩意就算是ios真機(jī)調(diào)試也沒辦法調(diào)試),只能alert斷點的方式來測有沒有流程跑不通,結(jié)果發(fā)現(xiàn)壓根頁面上沒有流程阻塞的問題,打印節(jié)點也是ok的,把外部文件的引用順序也優(yōu)化了,基本上能想到的方式都試了,還是有問題——最后,自己心血來潮(抓狂不已)下,點空白頁上某個點(大概是正常顯示金額的位置),發(fā)現(xiàn)能復(fù)制文本,于是趕緊復(fù)制出來看——文本正常,也就是說頁面上代碼,節(jié)點,數(shù)據(jù)都沒有問題,感覺就是數(shù)據(jù)拿到后壓根沒更新刷新dome樹,重新渲染的感覺(頁面不是自己對的接口,是后臺的同事對的,沒有用vue這種框架,我看了一下,有用到數(shù)據(jù)模板渲染的方式,類似于php這種的數(shù)據(jù)渲染方式,但是是c++語言,只能意會,不知真意)。

問題查驗到這里,我大概知道如何解決了——直接把類似于php+html這種混合開發(fā)轉(zhuǎn)換為用vue框架的方式就可以解決了——主要的原因就是數(shù)據(jù)沒有同頁面渲染想統(tǒng)一,vue的渲染模式就可以解決了

但是這肯定是一種暴力的解決方式——換言之,這個頁面內(nèi)容少,轉(zhuǎn)換起來比較輕松,如果是一個復(fù)雜的頁面,估計后臺同事要滿娘的,我想用一種可以動態(tài)更新dome樹的原生的方式,可是找了很多,沒找到類似的,有沒有遇見過類似問題的前輩,請指點指點

補(bǔ)上代碼:

html
<div class="page">
    <div class="section">
        <div class="Sicon">
            <img src="~/Content/images/icon.png" />
        </div>

        <p class="Sstate t_center">支付成功</p>
        <p class="Sprice t_center">¥ @orderInfo.OrderPrice</p>
        <p class="Sname t_center">@ViewBag.StoreName</p>



        @if (rebateList != null && rebateList.Count > 0)
            {
            <div class="paySline">
                <div class="flex f_relative f_center">
                    <span>本次消費獲得</span>
                    <hr />
                </div>
            </div>


            <div class="redList flex f_around @(rebateList.Count==2?"arrow":"")">

                @foreach (var item in rebateList)
                {
                    if (item.Type == (int)UserRebateType.OrderRebate)
                    {
                        <div class="redItem">
                            <p class="name t_o t_center">獲得店鋪返利金</p>
                            <p class="price t_o t_center">@item.Amount 元</p>
                        </div>
                    }
                    else if (item.Type == (int)UserRebateType.WeekendRedPacket)
                    {
                        <div class="redItem">
                            <p class="name t_o t_center">獲得周末紅包</p>
                            <p class="price t_o t_center">@item.Amount 元</p>
                        </div>
                    }
                    else if (item.Type == (int)UserRebateType.HighRedPacket)
                    {
                        <div class="redItem">
                            <p class="name t_o t_center">獲得高消費紅包</p>
                            <p class="price t_o t_center">@item.Amount 元</p>
                        </div>
                    }
                }

            </div>
        }


        <div class="paybtn flex f_center">
            <div class="SbtnLine flex f_center" onclick="closeWin()">完成</div>
        </div>
    </div>
</div>

//js
<script>
//微信關(guān)閉頁面方法
    function closeWin() {
        var ua = navigator.userAgent.toLowerCase();
        if (ua.match(/MicroMessenger/i) == "micromessenger") {
            WeixinJSBridge.call('closeWindow');
        } else if (ua.indexOf("alipay") != -1) {
            AlipayJSBridge.call('closeWebview');
        }
    }
</script>

頁面正常效果圖:

clipboard.png

回答
編輯回答
過客

我也有想到直接將頁面節(jié)點拼串,直接js插節(jié)點的方式——想想,還是很暴力

2017年9月23日 03:08