背景---
最近两天一直在看iOS js交互的内容,今天看到了一个比较全的文章Haley_Wong iOS和JS交互
大家可以看一下,我的这篇文章也是参考该文章而来。
碰到的问题1.下载demo后,点击扫一扫无反应。解决办法:在html中需要改动的如下
function scanClick()
// Alert(arr); 这段代码需要注释掉
loadURL("haleyAction://scanClick");
}
碰到的问题2:点击返回按钮无反应,应该是作者写的返回方法不是很正确,修改以及解释如下:
- (void)goBack
{
//判断是否能返回到H5上级页面
if (self.webView.canGoBack==YES) {
//返回上级页面
[self.webView goBack];
}else{
//退出控制器
[self.navigationController popViewControllerAnimated:YES];
}
}
碰到的问题3:点击修改背景色 无变化,修改代码如下:
- (void)changeBGColor:(NSURL *)URL
{
NSArray *params =[URL.query componentsSeparatedByString:@"&"];
NSMutableDictionary *tempDic = [NSMutableDictionary dictionary];
for (NSString *paramStr in params) {
NSArray *dicArray = [paramStr componentsSeparatedByString:@"="];
if (dicArray.count > 1) {
NSString *decodeValue = [dicArray[1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[tempDic setObject:decodeValue forKey:dicArray[0]];
}
}
CGFloat r = [[tempDic objectForKey:@"r"] floatValue];
CGFloat g = [[tempDic objectForKey:@"g"] floatValue];
CGFloat b = [[tempDic objectForKey:@"b"] floatValue];
CGFloat a = [[tempDic objectForKey:@"a"] floatValue];
//这段代码注释的原因:这是修改的self.view的背景色,当然我们可以从图层看到颜色的变化,但是不直观,我们可以直接修改html的颜色,
// self.view.backgroundColor = [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a];
//修改html的颜色
[self.webView evaluateJavaScript:@"document.body.style.backgroundColor=\"#EF4A4E\"" completionHandler:nil];
}
当然 以上的问题并不是重点我们需要关注的地方,但是点击无反应我的第一反应回事WKwebview会不会有问题啥的,希望可以消除大家的疑问。
正文:今天就不上传代码了 因为原作者大大写的比较详细,我就简单讲一下对于url拦截自己的理解。
首先,在html中有这么一句话:
iFrame.setAttribute("src", url);
这句话什么意思呢,说实话我也不懂,但是查阅一番资料后:如图,也就是显示这么一个URL,现在这个URL就是我们需要重点关注的东西。它是一个地址,也相当于一个标识符,拦截肯定也需要一些条件,URL包含两部分,scheme和resourceSpecifier 我们就是通过这个scheme标识符判断需不需要进行拦截处理。我感觉和上一篇的messageHandle差不多的意思。
20130906203103015.png在下面Wkwebview的代理方法里处理的拦截的具体操作
#pragma mark - WKNavigationDelegate
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
///拿到资源地址
NSURL *URL = navigationAction.request.URL;
///获取scheme 类似唯一标识符
NSString *scheme = [URL scheme];
///判断是都需要进行拦截处理
if ([scheme isEqualToString:@"haleyaction"]) {
[self handleCustomAction:URL];
decisionHandler(WKNavigationActionPolicyCancel);
return;
}
decisionHandler(WKNavigationActionPolicyAllow);
}
网友评论