WKWebView与js交互

    接手新的项目,直接就放弃了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)

    }






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在iOS中,可以通过WKWebView与JavaScript进行交互传值。以下是一些常见的方法: 1. 使用JavaScriptCore框架:在iOS 7及以上版本中,可以使用JavaScriptCore框架来实现WKWebViewJS交互传值。具体实现步骤如下: (1)在iOS中创建一个JSContext实例,通过该实例可以操作JS环境。 (2)将JSContext实例设置到WKWebView的配置对象中。 (3)在JS中调用iOS方法时,可以通过window.webkit.messageHandlers对象进行调用,例如window.webkit.messageHandlers.methodName.postMessage(params)。 (4)在iOS中,可以通过WKScriptMessageHandler代理方法来接收JS传递的消息,并进行处理。 2. 使用WKScriptMessageHandler协议:在iOS 8及以上版本中,可以通过WKScriptMessageHandler协议来实现WKWebViewJS交互传值。具体实现步骤如下: (1)在WKWebView的配置对象中设置WKUserContentController的代理对象,并添加需要监听的JS方法名。 (2)在JS中调用iOS方法时,可以通过window.webkit.messageHandlers对象进行调用,例如window.webkit.messageHandlers.methodName.postMessage(params)。 (3)在iOS中,可以通过WKScriptMessageHandler代理方法来接收JS传递的消息,并进行处理。 无论使用哪种方法,都需要注意JS和iOS之间传递的数据类型和格式。通常,JS传递的是字符串类型的数据,在iOS中需要进行解析和转换。同时,为了避免安全问题,需要对JS传递的数据进行校验和过滤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值