ios开发--网页中调用JS与JS注入
先将网页弄到iOS项目中:
网页内容如下, 仅供测试:
这是一个示例html文件
function clickme() {
alert('点击按钮了!');
}
OC与JS互动
blog.csdn.net/xn4545945
点击一下, 链接调用OC函数
js注入, 到baidu页面上实验
一、在OC中调用JS
最重要的方法:stringByEvaluatingJavaScriptFromString
直接上代码,说明见注释:
/**===========================OC 中调用 JS====================================*/
- (void)webViewDidFinishLoad:(UIWebView *)webView {
//1.OC中调用JS的文档对象. (先拼出文档对象的属性) 可以在浏览器控制台输入来进行测试
NSLog(@"%@", [self.webViewstringByEvaluatingJavaScriptFromString:@"document.title"]);
//2.OC中调用JS的方法
[self.webViewstringByEvaluatingJavaScriptFromString:@"clickme()"];
}
二、用超链接来调用OC中方法
步骤:
*1.设置webView的代理
*2.在代理的方法shouldStartLoadWithRequest:中调用.(该方法与网页的加载有关)
*方法:就是在网页链接中写好自定义协议.然后在OC方法中检查点击的链接中是否有该协议,有则做相关操作.
代码如下:
/**=========================== webView链接 中调用 OC===============================*/
/**webView的代理方法:加载页面有关. 当直接返回为NO时,会调用JS方法
其中request参数与发送请求有关*/
- (BOOL)webView:(UIWebView *)webViewshouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"%@", request.URL.absoluteString);//可以直接拿到发送请求的网址
NSString *urlStr = request.URL.absoluteString;
// 格式 neng://loadUrl/blog.csdn.net 协议/方法/网址
//判断链接中的协议头,如果是neng://, 则进行相关操作
if ([urlStrhasPrefix:@"neng://"]) {
//拿到除去协议头的后部
NSString *urlContent = [urlStrsubstringFromIndex:[@"neng://" length]];
NSLog(@"%@", urlContent);
//用/来拆分字符串
NSArray *urls = [urlContentcomponentsSeparatedByString:@"/"];
NSLog(@"拆分的结果为:%@", urls);
//取出方法名
if (urls.count !=2) {
returnNO;
}
NSString *funName = [NSStringstringWithFormat:@"%@:", urls[0]];//带参数的方法,加冒号
SEL callFun = NSSelectorFromString(funName);
//取消警告
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[selfperformSelector:callFunwithObject:urls[1]];//将blog.csdn.net作为参数传入
# pragma clang diagnostic pop
NSLog(@"方法名为%@, 传入参数为%@", funName, urls[1]);
returnNO;
}
returnYES;
}
- (void)loadUrl:(NSString *)urlStr {
NSLog(@"接收到参数: %@", urlStr);
//跳转到指定的URL--->urlStr
NSURL *url = [NSURLURLWithString:[NSStringstringWithFormat:@"http://%@", urlStr]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
}
三、JS实现注入
JS是操作网页的利器,利用好JS才能真正在应用中随心所欲的操作网页。
核心方法:stringByEvaluatingJavaScriptFromString(与第一个相同,这个是在iOS中操作JS最重要方法)
代码如下:
/**===========================JS 注入====================================*/
- (void)jsClick {
[self.webViewstringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
"script.type = 'text/javascript';"
"script.text = \"function myFunction() { "//定义myFunction方法
"var field = document.getElementsByName('word')[0];"
"field.value='WWDC2014';"
"document.forms[0].submit();"
"}\";"
"document.getElementsByTagName('head')[0].appendChild(script);"];//添加到head标签中
[self.webViewstringByEvaluatingJavaScriptFromString:@"myFunction();"];
}