我爱编程IOS

ios开发--网页中调用JS与JS注入

2018-02-22  本文已影响0人  开心就好2008

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();"];  

}  

上一篇 下一篇

猜你喜欢

热点阅读