iOS让js调用oc函数

原创 2015年07月07日 17:45:54

在UIWebView中,代码如下:

  1. //  
  2. //  webview.m  
  3. //  login  
  4. //  
  5. //
  6. // SWWebBrowser.m  Create by William Sterling on 14-1-20.  
  7. //  
  8.   
  9. #import "webview.h"  
  10. #import <JavaScriptCore/JavaScriptCore.h>/*导入库*/ 
  11.   
  12. @implementation webview  
  13.   
  14.   
  15. -(id)initWithFrame:(CGRect)frame  
  16. {  
  17.     self=[super initWithFrame:frame];  
  18.       
  19.     ifself ){  
  20.         self.webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 320self.bounds.size.width300)];  
  21.         self.webview.backgroundColor=[UIColor lightGrayColor];  
  22.         NSString *htmlPath=[[NSBundle mainBundle] resourcePath];  
  23.         htmlPath=[htmlPath stringByAppendingPathComponent:@"html/index.html"];  
  24.         NSURL *localURL=[[NSURL alloc]initFileURLWithPath:htmlPath];  
  25.         [self.webview loadRequest:[NSURLRequest requestWithURL:localURL]];  
  26.         [self addSubview:self.webview];  
  27.   
  28.          JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
  29.          context[@"log"] = ^() {  
  30.   
  31.             dlog(@"+++++++Begin Log+++++++");  
  32.             NSArray *args = [JSContext currentArguments];  
  33.   
  34.             for (JSValue *jsVal in args) {  
  35.                  dlog(@"%@", jsVal);  
  36.             }  
  37.   
  38.             JSValue *this = [JSContext currentThis];  
  39.              dlog(@"this: %@",this);  
  40.              dlog(@"-------End Log-------");  
  41.   
  42.         };  
  43.           
  44.   
  45. //        [context evaluateScript:@"log('ider', [7, 21], { hello:'world', js:100 });"];  
  46.   
  47.           
  48.     }  
  49.     return self;  
  50. }  
  51.   
  52.   
  53. @end 

注释:

JSContext *context = [self.webview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

获取该UIWebview的javascript执行环境。


(2)index.html代码

  1.   
  2. <!DOCTYPE html>  
  3.   
  4. <html lang="en">  
  5.       
  6.     <head>  
  7.           
  8.          <meta charset="utf-8">  
  9.               
  10.           <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">  
  11.             <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />      
  12.                   
  13.             <meta name="description" content="">  
  14.                       
  15.             <meta name="viewport" content="width=device-width; initial-scale=1.0">  
  16.              <script type="text/javascript" src="index.js"></script>             
  17.         
  18.                           
  19.       </head>  
  20.       
  21.     <button id="hallo" onclick="buttonClick()"> 点击button</button>  
  22.   
  23.     </body>  
  24.       
  25. </html> 
  1. function buttonClick()  
  2. {  
  3.     log("hello world");  
  4. }  

意思是点击这个button,就调用jakilllog()函数,jakilllog()函数显然是我们在oc中实现的一个block段,

就是上述绿色部分的block段。

 

点击button会执行么?答案是肯定的。

相关文章推荐

ios--网页js调用oc代码+传递参数+避免中文参数乱码的解决方案(实例)

此解决方案为本人测试可行的方案,欢迎转载,如需转载,请注明出处,谢谢! 此解决方案原理: 1、在ViewController.h中声明方法和成员变量,以及webView的委托: // // View...

iOS下JS与原生OC互相调用(总结)

iOS下JS与原生OC互相调用(总结)

iOS下JS与OC互相调用(五)-->UIWebView + WebViewJavascriptBridge

WebViewJavascriptBridge是一个有点年代的JS与OC交互的库,使用该库的著名应用还挺多的,目前这个库有7000+star。我去翻看了它的第一版本已经是4年前了,在版本V4.1.4以...

iOS下JS与OC互相调用(六)-->WKWebView + WebViewJavascriptBridge

上一篇文章介绍了UIWebView 如何通过WebViewJavascriptBridge 来实现JS 与OC 的互相调用,这一篇来介绍一下WKWebView 又是如何通过WebViewJavascr...

IOS WebView中JS和OC相互调用

现在有很多项目中都涉及到HTML5,在一个普通的APP里面嵌入HTML5网页,嵌入的这些网页在服务器把页面修改之后同样也能跟着修改,这样就能很方便的修改程序的展示内容。如果使用tabelView或者其...

iOS下JS与OC互相调用(四)--JavaScriptCore

前面讲完拦截URL的方式实现JS与OC互相调用,终于到JavaScriptCore了。它是从iOS7开始加入的,用 Objective-C 把 WebKit 的 JavaScript 引擎封装了一下,...

iOS下JS与OC互相调用(三)--MessageHandler

使用WKWebView的时候,如果想要实现JS调用OC方法,除了拦截URL之外,还有一种简单的方式。那就是利用WKWebView的新特性MessageHandler来实现JS调用原生方法。...

iOS开发-基于原生JS与OC方法互相调用并传值(附HTML代码)

最近项目里面有有个商品活动界面,要与web端传值,将用户在网页点击的商品id 传给客户端,也就是js交互,其实再说明白一点就是方法的互相调用而已。 本文叙述下如何进行原生的JavaScript交互 ...

js调用oc方法(ios自学笔记)

UIWebView中Html中用JS调用OC方法及OC执行JS代码 ? 1 2 3 4 5 6 7 8 9 1...

iOS下JS与OC互相调用(一)-->UIWebView 拦截URL

1.在JS 中做一次URL跳转,然后在OC中拦截跳转。(这里分为UIWebView 和 WKWebView两种,去年因为还要兼容iOS 6,所以没办法只能采用UIWebView来做。)2.利用WKWe...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS让js调用oc函数
举报原因:
原因补充:

(最多只允许输入30个字)