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开发,javascript直接调用oc代码而非通过改变url回调方式

之前一个ios项目中,需要通过UIWebview来打开一个静态页面,并在静态页面中 调用相关object-c代码。   一、以前使用js调用object-c的方法 关于如何使用javascript调用...
  • j_akill
  • j_akill
  • 2015年03月19日 20:09
  • 43275

iOS中OC调用js方法简述(一)

从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了。
  • Levilly
  • Levilly
  • 2016年08月07日 14:07
  • 4029

JS调用OC简单实例-传递一个或者多个参数给oc方法

// // ViewController.m // JSCallsOC // // Created by hq on 16/4/19. // Copyright © 2016年 hanqing...
  • baohanqing
  • baohanqing
  • 2016年04月19日 18:45
  • 3803

如何在IOS平台上使用js直接调用OC方法

http://www.cocos2dx.net/post/254 在Cocos2d-JS v3.0 RC2中,与Android上js调用Java一样,Cocos2d-JS也提供了在iOS和Ma...
  • lxs_kevin
  • lxs_kevin
  • 2014年12月22日 14:21
  • 808

iOS下JS与OC互相调用(八)--Cordova详解+实战

扯两句,可以跳过由于项目中Cordova相关功能一直是同事在负责,所以也没有仔细的去探究Cordova到底是怎么使用的,又是如何实现JS 与 OC 的交互。所以我基本上是从零开始研究和学习Cordov...
  • u011619283
  • u011619283
  • 2016年09月29日 11:34
  • 7781

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

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

ios--OC调用JS传递参数并获得返回值(实例)

本例子是为了让大家能快速开发出OC调用JS功能的一个简单的例子。 1、准备一个本地化的html网页,如jsIOS.html js调用o...
  • wanggsx20080817
  • wanggsx20080817
  • 2014年02月25日 16:51
  • 8388

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

使用WKWebView的时候,如果想要实现JS调用OC方法,除了拦截URL之外,还有一种简单的方式。那就是利用WKWebView的新特性MessageHandler来实现JS调用原生方法。...
  • u011619283
  • u011619283
  • 2016年08月06日 14:01
  • 8101

ios--OC调用JS并获得返回值(实例)

本例子是为了让大家能快速开发出OC调用JS功能的一个简单的例子。 1、准备一个本地化的html网页,如jsIOS.html js调用oc ...
  • wanggsx20080817
  • wanggsx20080817
  • 2014年02月25日 15:00
  • 3250

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

UIWebView中Html中用JS调用OC方法及OC执行JS代码 ? 1 2 3 4 5 6 7 8 9 1...
  • wangyang6275
  • wangyang6275
  • 2015年07月28日 13:10
  • 760
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS让js调用oc函数
举报原因:
原因补充:

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