H5研究二:OC与JS互调的趣味

来源:互联网 发布:淘宝个人信息资料出售 编辑:程序博客网 时间:2024/06/02 02:13
H5研究二:OC与JS互调的趣味 作者:大魁王 1.JavaScriptCore.framework的使用,Objective-C与JavaScript的调用。 2.需要掌握一点H5、JS知识 这里写图片描述

第一部分:OC调用js的方法

1.通过stringByEvaluatingJavaScriptFromString调用js中的方法
2. 在OC中通过JSContext 创建js环境 ,调用js方法 。然后通过
- (JSValue *)evaluateScript:(NSString *)script;调用JS
区别:JS方法通过webView调用或者是JS方法通过JSContext调用 以及是否需要JavaScriptCore.framework

首先是第一种:通过stringByEvaluatingJavaScriptFromString调用js中的方法

JS方法写在Html

Html:

<html>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        <script type="text/javascript">            function showAlert(message){                alert(message);            }                </script></html>

OC代码:

这里并不需要JavaScriptCore.framework
#import "FirstViewController.h"@interface FirstViewController ()<UIWebViewDelegate>@property (weak, nonatomic) IBOutlet UIWebView *webView;@end@implementation FirstViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view.    _webView.backgroundColor = [UIColor redColor];    _webView.delegate = self;    NSString *path = [[NSBundle mainBundle] pathForResource:@"First" ofType:@"html"];    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path]];    [_webView loadRequest:request];    UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithTitle:@"调JS" style:UIBarButtonItemStylePlain target:self action:@selector(rightAction)];    self.navigationItem.rightBarButtonItem = rightItem;}- (void)rightAction{    NSString *jsStr = [NSString stringWithFormat:@"showAlert('%@')",@"这里是JS中alert弹出的message"];    [_webView stringByEvaluatingJavaScriptFromString:jsStr];}

注意:showAlert('%@') 字符串与JS中的方法必须一致才能调用

第二种:在OC中通过JSContext 创建js环境 ,然后通过

- (JSValue *)evaluateScript:(NSString *)script;调用JS

OC代码:

这里需要JavaScriptCore.framework
- (void)rightAction{    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];    NSString *textJS = @"showAlert('这里是JS中alert弹出的message')";    [context evaluateScript:textJS];}

第二部分:js调用oc的方法

1.shouldStartLoadWithRequest调用oc中的方法
2. 在OC中通过JSContext block回调

首先是第一种:shouldStartLoadWithRequest调用oc中的方法

//1,html页面的js动作触发时运行//2,shouldStartLoadWithRequest不仅在url变化的时候调用,而且只要网页内容变化的时候也能调用#pragma mark - UIWebViewDelegate- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

第二种:在OC中通过JSContext block回调

html:

<html>    <header>        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        <script type="text/javascript">            function secondClick() {                share('分享的标题','分享的内容','图片地址');            }        </script>    </header>    <body>        <button type="button" onclick="secondClick()">Click Me!</button>    </body></html>
 JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];    //定义好JS要调用的方法, share就是调用的share方法名    context[@"share"] = ^() {        NSLog(@"+++++++Begin Log+++++++");        NSArray *args = [JSContext currentArguments];        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"方式二" message:@"这是OC原生的弹出窗" delegate:self cancelButtonTitle:@"收到" otherButtonTitles:nil];        [alertView show];        for (JSValue *jsVal in args) {            NSLog(@"%@", jsVal.toString);        }        NSLog(@"-------End Log-------");    };
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 键盘qaz失灵其他都没事怎么办 时时彩代理抓了怎么办 6p升级ios11卡顿怎么办 微信弄没了又换号了怎么办 快手账号异常请去激活怎么办 九游账号被转移怎么办 绝地求生刺激战场闪退怎么办 qq回执编号忘了怎么办 电脑开机要用户名和密码怎么办 电脑忘记用户名和密码怎么办 微信账号密码忘了怎么办 开发者账号密保忘记怎么办 华为账号忘记密保问题怎么办 fiyme账号忘记密保怎么办 id忘了密保问题怎么办 vivo账号密码忘记了怎么办 步步高账号密码忘了怎么办 步步高手机账号密码忘了怎么办 康佳电视通行证忘了怎么办 尚游通行证忘了怎么办 深圳免限行通行证忘了截图怎么办 电脑把管理员账号删除了怎么办 uc新浪加载失败怎么办红包还 微信忘记账号和密码怎么办 苹果手机忘记id密码怎么办 购买游戏账号被找回怎么办 交易猫账号忘了怎么办 爱奇艺账号怎么修改不了密码怎么办 论文目录显示错误未定义书签怎么办 银行账号被冻结了怎么办 哈罗单车账号被冻结怎么办 麻袋赚赚账号被冻结怎么办 网赌账号被冻结怎么办 梦想城镇账号被冻结怎么办 钱被银行冻结了怎么办 百度云账号密码忘了怎么办 微信钱包忘记密码了怎么办 word文档打开文件出错怎么办 有盘文件删不了怎么办 u盘文档严重损坏怎么办 wps文档打开是乱码怎么办