在html5 網頁中模擬寫了一個名叫alert 的函數,主要實現了一個提示框和點擊提示框回調的功能,函數以下:css
function alert(word, fn) { $("#coverbg").show(); if (fn && typeof (fn) == "function") { var conStr = "<div id='conDiv' class='conDiv'>" + "<div id='tipcontent' class='concontentc'>" + word + "</div>" + "<div class='conbtn' style='width:100%;' onclick='hideCon(" + fn + ");'>肯定</div>" + "</div>" } else { var conStr = "<div id='conDiv' class='conDiv'>" + "<div id='tipcontent' class='concontentc'>" + word + "</div>" + "<div class='conbtn' style='width:100%;' onclick='hideCon();'>肯定</div>" + "</div>" } if ($("#conDiv").length > 0) { $("#conDiv").remove() } $("body").append($(conStr)); var wordWidth = noneWidth(word); var divW = $("#conDiv").width(); if (wordWidth / divW > 0.8) { wordWidth = divW * 0.8 } $("#tipcontent").width(wordWidth); var winH = $(window).height() / 2 - 90; $("#conDiv").css("top", winH + "px") }
在外部瀏覽器中和Android 手機微信中測試均可以正確回調函數fn,但是在IOS中就是不能正確回調函數。真是奇怪了!而後就開始一步步找問題,剛開始懷疑是html
if (fn && typeof (fn) == "function")
條件不成立,而後弄了個日誌顯示,結果返回爲undefined在微信內部瀏覽器中,而後又用了call,apply等方式都是undeined,實在無語,最後把fn 參數傳遞成字符串過去發現依然是undefined,真讓人納悶,後來一想有多是alert被微信使用了吧,只能傳遞一個參數,就把函數從新命名成了showalert,通過測試竟然能夠了!html5
經過以上問題的解決,發現微信android 版本和IOS版本實現應該差異比較大!另外微信內置了alert函數優先級高!不知道分析的是否正確!android