android要执行脚本,只有通过本地的webview打开脚本页面。
调用步骤
1、设置webview支持脚本
webSettings.setJavaScriptEnabled(true)2、打开脚本页面
mWebView.loadUrl("file:///android_asset/demo.html")//这里打开该app的asset目录下的demo.html,里面含有wave函数脚本3、调用脚本
mWebView.loadUrl("javascript:wave()")//调用打开页面中的wave函数目前iOS项目中 Webview 几乎都会用到,iOS 8 之前使用UIWebView,iOS 8 之后 Apple 就不推荐使用了,目前已经放弃了,如果项目中存在就无法上架了,需要转为WKWebView了,说实话 UIWebView 是有性能上的缺陷,内存优化不够友好等,但是不得不说这是老的iOS开发人员用的最熟练熟悉的了,用起来得心应手。非迫不得已还真不愿转到WKWebView。好吧,既然已经这样了,又何必苦苦单恋一支花呢?
看了网上教程很多,自己使用小结一下,简单易用,本文适用于菜鸟级开发,废话不说了,
最主要的方法:发送消息
注意:对象名和方法名jumpUserProtocol名字的一致,参数可以是常用的NSArray,NSDictionary等类型,先说下在这个Demo中其实没用上,用的方法名判断的。
注意: addScriptMessageHandler
name为方法名 ,和JS 中的保持一致,添加脚本,相当于给Webview添加一个监听,有这个功能来处理JS。
在WKScriptMessageHandler代理方法中处理回调,实现自己的逻辑。
上面就是JS调用OC原生实现。
这个其实很简单,就一个方法:
WKWebView是现代 WebKit API 在 iOS 8 和 OS X Yosemite 应用中的核心部分。它代替了 UIKit 中的UIWebView和 AppKit 中的WebView,提供了统一的跨双平台 API(iOS和OS)。
//JS文件路径
NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"demo" ofType:@"js"]
//读取JS文件内容
NSString *jsContent = [NSString stringWithContentsOfFile:jsPath encoding:NSUTF8StringEncoding error:nil]
//创建用户脚本对象,
//WKUserScriptInjectionTimeAtDocumentStart :HTML文档创建后,完成加载前注入,类似于<head>中
//WKUserScriptInjectionTimeAtDocumentEnd :HTML文件完成加载后注入,类似于<body>中
WKUserScript *script = [[WKUserScript alloc] initWithSource:jsContent injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]
//添加用户脚本
[webView.configuration.userContentController addUserScript:script]
//执行JS方法
[webView evaluateJavaScript:@"test()" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
//result为执行js方法的返回值
if(error){
NSLog(@"Success")
}else{
NSLog(@"Fail")
}
}]
// 页面开始加载时调用
// 这个方法是服务器重定向时调用,即 接收到服务器跳转请求之后调用
5、WKWebView疑难
问题: http://stackoverflow.com/questions/24882834/wkwebview-not-loading-local-files-under-ios-8
具体参见: https://github.com/shazron/WKWebViewFIleUrlTest
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)