您的位置:首页 > 移动开发

WKWebView与js交互

2016-03-15 18:52 573 查看
    接手新的项目,直接就放弃了iOS8以下的用户.想想也是醉了.那么小白带你怎么玩转WKWebView.

首先点进去看API,好到此结束了.那我下面就不用写了.其实网上有很多相关的WEWebView的博客简单的怎么用,我综合一下了大家可以参考岁寒大神的个人博客--WKWebView混合开发框架

爬坑时刻 1 (2016 - 3 - 16)

1.无法设置缓存

在UIWebView,使用NSURLCache缓存,通过setSharedURLCache可以设置成我们自己的缓存,但WKWebView不支持NSURLCache (用了半个小时在设置怎么清除缓存...结果是说多都是泪)

2.webview没激活无法与JS交互

当你用懒加载把几个控制器的html页面都保存下来了.突然你想调用某个页面的js方法,而当前页面不是js所在页面..那么问题来了.什么数据更新不了.或者调用失败.(整整停了三天处理这个问题,js大神都被我坑倒了.只能呵呵.....)解决方法:告诉要调用的页面是否要调用某个js方法,然后在viewWillAppear或者其他要显示当前页面的方法中调用该页面的js

爬坑时刻 2(2016 - 4 - 25)

1.js无法刷新

先解析一下:js 无法刷新是什么回事, 就是在之前你访问过该页面了, 然后你把js 或者 css 更改了提交到服务器,
你从新刷新网页, 没变化, 杀死进程,在点击进app 刷新网页 没变化.
那么处理方法:在URL 后面加个随机数

let ind =
url.characters.indexOf("?") //判断url
是否有拼其他字段

        var str:
String!

       if ind ==
nil

        {

            str = "?iosv=\(RandomTime.time())"
 //随机数

        }

        else

        {

            str = "&iosv=\(RandomTime.time())" //随机数

        }

        str = url + str

2.WKWebView说没缓存实际直接存储了数据

经过上面的方法处理了js 不刷新的问题, 那么问题又来了,经过十几天的刷刷刷刷....



瞬间爆炸有木有!...看到这种情况你敢不卸载吗! 
查看webKit 文件 发现 每打开一个网页 WKwebView 都会根据当前的url MD5 之后下载两个 文件 (一个后面加多一个body的)
后面加多一个随机数每次打开以前打开过的页面 都下载一个 ,内存当然爆炸啊!
解决方法: 随机数 过一定时间再改变, 存储到一定程度的时候 就删 怎么计算存储 可以参考我的博客 iOS 计算文件夹中包含所有文件的大小

3.拦截Url的方式响应

当网页中带Target
属性_blank(打开新窗口显示页面)
为跳转的时候
调用这个方法

    func webView(webView:
WKWebView, createWebViewWithConfiguration configuration:
WKWebViewConfiguration, forNavigationAction navigationAction:
WKNavigationAction, windowFeatures:
WKWindowFeatures) ->
WKWebView? { }

当网页中带没带跳转属性
为跳转的时候
调用这个方法

 func webView(webView:
WKWebView, decidePolicyForNavigationAction navigationAction:
WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) ->
Void) {

        decisionHandler(.Allow)

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息