1.背景
我們的項(xiàng)目是混合開發(fā),最近需要將UIWebView替換成WKWebView,我基于WKWebView封裝了本地的混合框架用來加載本地html結(jié)果發(fā)現(xiàn)很多請(qǐng)求攔截不到(比如定位,獲取天氣數(shù)據(jù)源等)
2.問題發(fā)現(xiàn)
由于UIWebView是可以通過JSContext來做交互的,比如可以通過JSContext來監(jiān)聽js方法并用JSValue來接收相關(guān)參數(shù)什么的,所以之前我們的UIWebView基于這個(gè)加載本地html對(duì)于一些相關(guān)請(qǐng)求是沒問題的,但是當(dāng)我使用攔截協(xié)議的時(shí)候發(fā)現(xiàn)UIWebView也不行.對(duì)此我發(fā)現(xiàn)只能攔截到單個(gè)url其他攔截不到,說明一些請(qǐng)求被取消了.
3.解決問題
我們的js在 created:function的時(shí)候同時(shí)發(fā)出了多個(gè)url請(qǐng)求 sdk.js里ums.send方法中進(jìn)行多個(gè)url連續(xù)進(jìn)行l(wèi)ocation 會(huì)導(dǎo)致一些location操作被取消 所以要自己自定義laodURL方法進(jìn)行加載 這樣就解決了一些協(xié)議攔截不到的問題 http://blog.devtang.com/2012/03/24/talk-about-uiwebview-and-phonegap/
加載URL采用的是document.location(沒錯(cuò)連續(xù)加載會(huì)導(dǎo)致某一次的location操作被取消)所以采用自定義加載url的方法來解決
// Javascript 語言
// 通知 iPhone UIWebView 加載 url 對(duì)應(yīng)的資源
// url 的格式為: gap:something
function loadURL(url) {
? ? var iFrame;
? ? iFrame = document.createElement("iframe");
? ? iFrame.setAttribute("src", url);
? ? iFrame.setAttribute("style", "display:none;");
? ? iFrame.setAttribute("height", "0px");
? ? iFrame.setAttribute("width", "0px");
? ? iFrame.setAttribute("frameborder", "0");
? ? document.body.appendChild(iFrame);
? ? // 發(fā)起請(qǐng)求后這個(gè) iFrame 就沒用了,所以把它從 dom 上移除掉
? ? iFrame.parentNode.removeChild(iFrame);
? ? iFrame = null;
}