关于UIWebView或者WKWebView拦截不到协议问题

1.背景

我们的项目是混合开发,最近需要将UIWebView替换成WKWebView,我基于WKWebView封装了本地的混合框架用来加载本地html结果发现很多请求拦截不到(比如定位,获取天气数据源等)

2.问题发现

由于UIWebView是可以通过JSContext来做交互的,比如可以通过JSContext来监听js方法并用JSValue来接收相关参数什么的,所以之前我们的UIWebView基于这个加载本地html对于一些相关请求是没问题的,但是当我使用拦截协议的时候发现UIWebView也不行.对此我发现只能拦截到单个url其他拦截不到,说明一些请求被取消了.

3.解决问题

我们的js在 created:function的时候同时发出了多个url请求 sdk.js里ums.send方法中进行多个url连续进行location 会导致一些location操作被取消 所以要自己自定义laodURL方法进行加载 这样就解决了一些协议拦截不到的问题 http://blog.devtang.com/2012/03/24/talk-about-uiwebview-and-phonegap/

加载URL采用的是document.location(没错连续加载会导致某一次的location操作被取消)所以采用自定义加载url的方法来解决

// Javascript 语言

// 通知 iPhone UIWebView 加载 url 对应的资源

// 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);

    // 发起请求后这个 iFrame 就没用了,所以把它从 dom 上移除掉

    iFrame.parentNode.removeChild(iFrame);

    iFrame = null;

}

参见唐巧博客解释

你可能感兴趣的:(关于UIWebView或者WKWebView拦截不到协议问题)