`
zhengjj_2009
  • 浏览: 153654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iOS7以后的JavaScriptCore使用demo

 
阅读更多

由于时间的关系,直接上代码

JSCallOC.html

<!doctype html>

<html>

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, target-densitydpi=device-dpi"/>

    <title>JSCallOC</title>

    <style>

        *

        {

            //-webkit-tap-highlight-color: rgba(0,0,0,0);

            text-decoration: none;

        }

    

        html,body

        {

            -webkit-touch-callout: none;                /* prevent callout to copy image, etc when tap to hold */

            -webkit-text-size-adjust: none;             /* prevent webkit from resizing text to fit */

            -webkit-user-select: none;                  /* prevent copy paste, to allow, change 'none' to 'text' */

        }

    

        #div-a

        {

            background:#FBA;

            color:#FFF;

 

            border-radius: 25px 5px;

        }

 

 

    </style>

    

    <script type="text/javascript">

        

        function showResult(resultNumber) {

            //alert(resultNumber);

            document.getElementById("result").innerText = resultNumber;

        }

    

    </script>

    

</head>

 

<body style="background:#CDE; color:#FFF">

    

    <!--<div>

        <font size="3" color="black">输入一个整数:</font>

        <textarea  id="input" style="font-size:10pt;color:black;"></textarea>

    </div>

    <br/>

    

    <div>

        <font size="3" color="black">结果: <b id="result"> </b> </font>

    </div>

    <br/>-->

    <div>

        <font size="3" color="black"> <b id="result"> </b> </font>

    </div>

    <br/>

    

    <div id="div-a">

        <center>

            

            <br/>

            <input type="button" value="带2个入参的方法测试" onclick="Native.testMethodWithParam1Param2('param1_value','param2_value');" />

            <br/>

            <br/>

            

            <br/>

            <input type="button" value="带2个入参的方法测试2" onclick="Native.testMethod(11111,'22222');" />

            <br/>

            <br/>

            

            <br/>

            <input type="button" value="参数为数组的方法测试" onclick="Native.testArray([11111,'22222']);" />

            <br/>

            <br/>

            

            <input type="button" value="带一个参数的方法测试" onclick="Native.testLog('测试');" />

            <br/>

            <br/>

            

            <input type="button" value="测试在HTML页面显示数据的" onclick="Native.testShowTextOnHtml('1234');" />

            <br/>

            <br/>

            

            <!--<br/>

            <input type="button" value="计算阶乘" onclick="native.calculateForJS(input.value);" />

            <br/>

            <br/>

            

            

            <input type="button" value="测试log" onclick="log('测试');" />

            <br/>

            <br/>

            

            <input type="button" value="oc原生Alert" onclick="alert('alert');" />

            <br/>

            <br/>

            

            <input type="button" value="addSubView" onclick="addSubView('view');" />

            <br/>

            <br/>

            

            <a id="push" href="#" onclick="native.pushViewControllerTitle('SecondViewController','secondPushedFromJS');">

                push to second ViewController

            </a>

            

            <br/>-->

            <br/>

            

        </center>

    </div>

</body>

 

</html>

----------------------------------------------------

JSDemoViewController.h

#import <UIKit/UIKit.h>

#import <JavaScriptCore/JavaScriptCore.h>

 

@protocol JSDemoExport <JSExport>

//JSExportAs

//(calculateForJS  /** handleFactorialCalculateWithNumber 作为js方法的别名 */,

// - (void)handleFactorialCalculateWithNumber:(NSNumber *)number

// 

// );

//

//- (void)pushViewController:(NSString *)view title:(NSString *)title;

 

-(void)testMethodWithParam1:(NSString *)param1 param2:(NSString *)param2;

 

-(void)testLog:(NSString *)logText;

-(void)testShowTextOnHtml:(NSString *)showText;

-(void)test:(NSNumber *)param1 method:(NSString *)param2;

-(void)testArray:(NSArray *)dataArray;

@end

 

@interface JSDemoViewController : UIViewController <UIWebViewDelegate, JSDemoExport>

{

     UIWebView *myWebView;

    JSContext *context;

}

 

 

@end

 

========================================================

#import "JSDemoViewController.h"

 

@interfaceJSDemoViewController ()

 

@end

 

@implementation JSDemoViewController

 

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view.

    NSString *path = [[[NSBundlemainBundle] bundlePathstringByAppendingPathComponent:@"JSCallOC.html"];

    //    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];

    //    [self.webView loadRequest:request];

    //NSLog(@"path >>>= %@",path);

    myWebView = [[UIWebViewalloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, 400)];

    myWebView.delegate = self;

    NSURL *URL = [NSURL URLWithString:path];

    NSURLRequest *requestww = [NSURLRequest requestWithURL:URL];

    [myWebView loadRequest:requestww];

    [self.view addSubview:myWebView];

    //NSLog(@"webView.frame = %@",NSStringFromCGRect(webView.frame));

}

 

 

#pragma mark - UIWebViewDelegate

 

- (void)webViewDidFinishLoad:(UIWebView *)webView{

    

    // html title 设置 导航栏 title

    self.title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];

    // 禁用 页面元素选择

    //[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];

    

    // 禁用 长按弹出ActionSheet

    //[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];

    

    // Undocumented access to UIWebView's JSContext

    context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    

    // 打印异常

    context.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {

        context.exception = exceptionValue;

        NSLog(@"%@", exceptionValue);

    };

    

   

    context[@"Native"] = self; //JSExport 协议关联 native 的方法

    

    

    context[@"log"] = ^(NSString *str){//block 形式关联 JavaScript function

        NSLog(@"%@", str);

    };

//

    // block 形式关联 JavaScript function

    context[@"alert"] = ^(NSString *str) {

        UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:@"msg from js"message:str delegate:nilcancelButtonTitle:@"ok"otherButtonTitles:nil, nil];

        [alert show];

    };

//

    __blocktypeof(self) weakSelf = self;

    context[@"addSubView"] = ^(NSString *viewname) {

        UIView *view = [[UIView alloc]initWithFrame:CGRectMake(10, 500, 300, 100)];

        view.backgroundColor = [UIColorredColor];

        UISwitch *sw = [[UISwitch alloc]init];

        [view addSubview:sw];

        [weakSelf.view addSubview:view];

    };

}

 

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

-(void)testArray:(NSArray *)dataArray{

    NSLog(@"testArray = %@", dataArray);

}

 

-(void)test:(NSNumber *)param1 method:(NSString *)param2{

     NSLog(@"test>>> param1 = %@, method=%@ ",param1, param2);

}

-(void)testMethodWithParam1:(NSString *)param1 param2:(NSString *)param2{

    NSLog(@"testMethodWithParam1>>> param1 = %@, param2=%@ ",param1, param2);

}

 

-(void)testLog:(NSString *)logText{

     NSLog(@"testLog>>> logText = %@ ", logText);

}

 

-(void)testShowTextOnHtml:(NSString *)showText{

    NSString *resultText = [NSString stringWithFormat:@"%@ date=%@",showText, [NSDate date]];

    NSLog(@"%@", resultText);

    [context[@"showResult"] callWithArguments:@[resultText]];//回调JS的方法showResult(resultText);

}

 

 

@end

 

 

分享到:
评论

相关推荐

    ios7 JavaScriptCore.framework

    JavaScriptCore是iOS 7及更高版本中引入的一个框架,它使得开发者可以在Objective-C或Swift应用中直接执行JavaScript代码。这个框架极大地扩展了iOS应用的功能,特别是在处理数据、创建动态UI或者与Web服务交互时...

    JavaScriptCore-Demo-master.zip

    `JavaScriptCore-Demo-master.zip`是一个包含示例代码的压缩包,用于演示如何在iOS或macOS应用程序中使用JavaScriptCore框架。 在iOS或macOS开发中,JavaScriptCore提供了两个主要的接口:`JSContext`和`JSValue`。...

    ios-javascriptcore-demo:iOS 演示

    在 `ios-javascriptcore-demo` 示例应用中,可能会展示如何在用户界面(如 UIButton 或 UITableView)事件处理中使用 JavaScriptCore,或者如何将 JavaScript 作为数据处理或逻辑层的一部分。这样的设计可以简化应用...

    iOS:JavaScriptCore.framework的使用.OC篇

    JavaScriptCore是Apple为iOS和macOS提供的一种框架,它允许Objective-C(简称OC)应用程序与JavaScript代码进行交互。在iOS开发中,JavaScriptCore被广泛应用于实现动态内容加载、富文本编辑、以及App与Web页面之间...

    iOS与H5界面JSBridge交互Demo

    这个"iOS与H5界面JSBridge交互Demo"提供了一个直观且易于理解的实例,帮助开发者快速掌握两者间的通信机制。 JSBridge是一种桥梁,它允许iOS应用中的Objective-C或Swift代码与网页中的JavaScript进行通信,实现数据...

    iOS javascript engine demo project

    本项目“iOS javascript engine demo project”专注于演示如何在iOS应用中集成并使用JavaScriptCore,这是Apple为iOS和macOS提供的内置JavaScript引擎。 JavaScriptCore是WebKit的一部分,它允许开发者在Objective-...

    JavaScriptCoreDemo

    IOS7之前,接触 JS 更多的是处理UIWebView的时候,如:...但IOS7引入了JS框架&lt;JavaScriptCore/JavaScriptCore.h&gt;,给了“纯IOS程序员”一个枯木逢春的契机~学习强大的 JavaScript。

    ios 原生与js交互

    ios7之后,ios中加入了JavaScriptCore框架。该框架让Objective-C和JavaScript代码直接的交互变得更加的简单方便。ios 原生与js交互,demo代码,其中包括利用JSBinding简单使用!

    ios-Native与Html交互.zip

    JavaScript 与 iOS 交互 ,采用iOS 7之后 自带 JavaScriptCore实现 ,使用简单无需第三方库 Demo地址:https://github.com/GesanTung/JS2iOS

    jsdemo_iOS原生h5交互_源码

    "jsdemo_iOS原生h5交互_源码"是一个示例项目,旨在展示如何实现这种交互。在这个项目中,开发者可以找到已编写好的代码,帮助理解并应用到自己的项目中。 首先,我们要了解iOS原生应用与H5交互的基本原理。通常,这...

    JS与OC互调demo

    2. **iOS7之后的JavaScriptCore.framework** 自iOS7起,Apple引入了`JavaScriptCore`框架,这是一个更强大、更安全的JS与OC交互机制。`WKWebView`替代了`UIWebView`,并提供了`WKUserContentController`来管理用户...

    使用JavaScriptCore实现OC和JS交互详解

    自iOS 7起,苹果将其引入到iPhone平台上,极大地简化了Objective-C(简称OC)与JavaScript之间的交互。这个框架使得原生应用能够直接调用JavaScript代码,反之亦然,从而在两者之间建立了一座桥梁。 首先,为了实现...

    webview学习demo

    "webview学习demo"是一个专为iOS开发者设计的学习资源,它涵盖了如何在iOS应用中使用WebView以及如何实现iOS与JavaScript之间的双向通信。这个示例项目经过测试,可以免费直接运行,对于理解WebView的使用具有很高的...

    js与oc交互demo

    这个demo为学习和实践这两种语言的交互提供了基础,对于希望进行混合应用开发的iOS开发者来说,这是一个非常有价值的参考资料。通过学习和理解这个demo,开发者可以更好地掌握如何在iOS应用中集成JavaScript,提升...

    JSPatchFixDemo

    **JSPatch** 是一种动态运行时技术,它允许开发者使用 JavaScript 编写 Objective-C 的代码,并在 iOS 应用中实时执行。这种技术极大地提高了开发效率,因为它使得开发者能够在不发布新版本的情况下修复程序中的问题...

    Swift使用Echarts的Demo

    在Swift中使用ECharts通常涉及到几个关键步骤,包括引入JavaScriptCore框架、加载ECharts的JavaScript代码、处理用户交互和数据更新。 1. **引入JavaScriptCore框架**: 在Swift项目中使用ECharts,首先需要引入...

    ios-圆形进度条.zip

    在iOS开发中,创建具有独特视觉效果的UI组件可以极大地提升...7. Web端圆形进度条实现:可能使用SVG或canvas。 了解并掌握这些知识点,开发者可以创建出富有个性和互动性的圆形进度条,提高应用程序的用户界面质量。

    ios-基于WKWebView的hybride的demo 。拦截了css,js,png等所有客户端请求。原理还是NSURLProtocol.zip

    4. **更好的JavaScript性能**:使用独立的JavaScriptCore引擎,使得JavaScript执行效率更高。 **Hybrid开发与WKWebView的集成** Hybrid开发通常涉及以下几个关键步骤: 1. **WKWebView的初始化**:首先需要在代码...

    javascript 直接调用OC 方法demo

    在iOS中,JavaScriptCore是苹果提供的一个框架,允许原生应用执行JavaScript代码,并与JavaScript环境交互。它是WebKit的一部分,使得JavaScript与Objective-C或Swift的交互成为可能。在JavaScript调用OC方法时,...

    iOS20个精品源码(二)

    10. **jsCallOC.zip**:JavaScript与Objective-C交互的示例,可能包括WKWebView的使用、JavaScriptCore框架的应用,帮助开发者理解如何在iOS中实现Web与原生代码的桥接。 通过这些源码的学习,你可以深化对iOS开发...

Global site tag (gtag.js) - Google Analytics