修改頁面標題?,用document.title
不就好咯。emm..,並沒有這麼簡單,在iOS的webview中,這個方法未必行得通。之前在做一個支付寶相關的H5頁面便遇到這個問題,一起來看下吧~
原因分析
通常來講,iOS的原生webview(UIWebView或WKWebView)直接用document.title
修改標題是不會生效的,要在頁面中修改其naviBar上的標題只有兩種方法能做到:
- 通過webview提供的jssdk進行修改
- 在webview
pageload
事件回撥中,document.title
修改會生效。。。
當然上面的限制是iOS的原生webview才有的,APP自身可以對webview做相容,比如微信(詳見iOS WKWebview 網頁開發適配指南)。
解決方案
考慮上面兩種種會觸發更新標題的方法,具體方案如下:
通過jssdk進行修改
這種方案依賴客戶端提供的jssdk,比如支付寶就提供了修改H5頁面標題欄的方法。
修改document.title,併傳送一個iframe請求
iframe也是一種文件物件,所以iframe的載入完成也能觸發webview的pageload
事件,這樣webview就能實現對document.title
的獲取、進而更新標題了。
具體程式碼如下:
function changeTitle(title) {
document.title = title;
let i = document.createElement('iframe');
i.style.display = 'none';
i.src = 'xxx'; // 載入當前頁面下一個體積小的資源,比如favicon.ico
i.onload = ()=>{
setTimeout(()=>{
i.remove()
}, 0);
}
document.body.appendChild(i);
}複製程式碼
這種方案通用性最好,不依賴具體的app。但缺點就是要再多傳送一個請求。
結論
iOS的webview存在無法通過document.title
修改標題的坑,我們可以通過呼叫webview的jssdk、或者傳送iframe請求等來間接避開這個問題。
最後還是期待蘋果能填下這個坑,提供更好的開發體驗吧。