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

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

}  

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 9,190评论 2 7
  • OC调用JS 首先我们创建一个WebView,加载一个本地的HTML文件 在webview加载完成时-(void)...
    45b645c5912e阅读 4,829评论 2 5
  • http://www.cnblogs.com/mddblog/p/5281748.html 一、整体介绍 UIWe...
    F麦子阅读 5,005评论 0 2
  • 随着H5技术的兴起,在iOS开发过程中,难免会遇到原生应用需要和H5页面交互的问题。其中会涉及方法调用及参数传值等...
    Chris_js阅读 8,286评论 1 8
  • 一、简介 近两年随着HTML5的迅速发展与日趋成熟,越来越多的移动开发者选择使用HTML5来进行混合开发,不...
    宝宝teacher阅读 6,910评论 3 15