如何在ios工程中用oc调用js算法
来源:互联网 发布:linux dd img 编辑:程序博客网 时间:2024/06/04 23:35
假如现在有一套js的加密算法sm2,包含很多个js文件,需要在ios工程里面调用,适当的地方对数据加密,当然不能把uiwebview显示出来去点击上面的按钮。前提:有一个html文件,这个html里面引用的所有的js文件,这个html上面已经写好了调用js的方法,步骤,按钮
第一步:新建一个ios工程,把html和js文件导入,写一个webView加载这个html
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"SM2.html" withExtension:nil]; NSURLRequest *request = [NSURLRequest requestWithURL:fileURL]; [self.webview loadRequest:request];发现:点击页面上的按钮是没有反应的。问题1:如何获取到所有的js文件路径,然后加载到webview里
//获取所有的js文件路径NSArray *jsArr = [[NSBundle mainBundle]pathsForResourcesOfType:@"js" inDirectory:nil];//加载到webviewNSString *js = [NSString stringWithContentsOfFile:jspath encoding:NSUTF8StringEncoding error:nil];[webView stringByEvaluatingJavaScriptFromString:js];发现:没什么作用,这样做不对
第二步:在html文件中找到对应的调用js的代码,把所有"wenjianjianame/"都去掉
<span style="font-size:14px;">//这只是其中一个<script src="wenjianjianame/sm2-test.js"></script></span><span style="font-size:14px;">//改成这样,都把相对路径去掉<script src="sm2-test.js"></script></span>
再次运行,webview上的功能可以正常使用了。
第三步:如何用oc代码直接调用js,就是自动执行按钮的点击事件
在工程中引入JavaScriptCore.framework
在- (void)webViewDidFinishLoad:(UIWebView *)webView方法中填写下面代码
//获取当前webview的jscontext JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; NSString *JS=@"alert('thisisjs')"; [context evaluateScript:JS];//执行js语句执行后,可看到一个警告框。第四步:在html文件中,加密方法的代码是:
在- (void)webViewDidFinishLoad:(UIWebView *)webView方法中执行一下上面的代码function jiami() {//设置公钥 var pubKey = "04852611F744AF045689DCFBF4C0437730D2D2DE332AB7F0FC02769C5FAB8A89437D9384F19AB882ED668A28936DB92475AA79AEF8690EE36F6FB77C69B9B571F8";//将公钥和明文传入加密方法 var encryptData = sm2-1.jiami(pubKey, msgData);//得到密文textMiwen.value = encryptData;}
JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];//需要把上面的代码写成字符串 NSString *jsStr=@" var pubKey = \"04852611F744AF045689DCFBF4C0437730D2D2DE332AB7F0FC02769C5FAB8A89437D9384F19AB882ED668A28936DB92475AA79AEF8690EE36F6FB77C69B9B571F8\";var encryptData = sm2-1.jiami(pubKey, msgData);textMiwen.value = encryptData; "; [context evaluateScript:jsStr];
运行一下,确实能得到加密数据。
问题2:怎么在ios中获取到加密的数据,即js如何调用oc
第五步:在- (void)webViewDidFinishLoad:(UIWebView *)webView加一个监听
//监听 //logmiwen是js里的一个方法名 context[@"logmiwen"] = ^() { NSArray *args = [JSContext currentArguments];//输出logmiwen的参数 for (id obj in args) { NSLog(@"%@",obj); } };
第六:修改一下上面的代码,在最后面调用logmiwen方法JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];//需要把上面的代码写成字符串 NSString *jsStr=@" var pubKey = \"04852611F744AF045689DCFBF4C0437730D2D2DE332AB7F0FC02769C5FAB8A89437D9384F19AB882ED668A28936DB92475AA79AEF8690EE36F6FB77C69B9B571F8\";var encryptData = sm2-1.jiami(pubKey, msgData);textMiwen.value = encryptData; logmiwen(encryptData);"; [context evaluateScript:jsStr];执行一下 ,可以看到密文在控制台输出了。
0 0
- 如何在ios工程中用oc调用js算法
- cocos2d-js如何在IOS平台上使用js直接调用OC方法
- iOS-JS调用OC
- 在IOS工程中使用OC调用C语言国密算法SM4(来替换DES算法)
- 如何在IOS平台上使用js直接调用OC方法
- 在ASP.NET中用JS如何调用Server端方法?
- 在ASP.NET中用JS如何调用Server端方法?
- 【cocos2d-js官方文档】二十三、如何在IOS平台上使用js直接调用OC方法
- 在iOS平台上使用js直接调用OC方法
- 如何要在Swift工程中调用OC文件 以及 如何调用某个类的方法
- ios--js调用oc(实例)
- iOS js调用oc方法
- Xcode工程中如何在OC类中调用C文件中的方法
- UIWebView中Html中用JS调用OC方法及OC执行JS代码
- UIWebView中Html中用JS调用OC方法及OC执行JS代码
- UIWebView中Html中用JS调用OC方法及OC执行JS代码
- UIWebView中Html中用JS调用OC方法及OC执行JS代码
- UIWebView中Html中用JS调用OC方法及OC执行JS代码
- 在Leangoo里怎么修改昵称,简称,头像?
- 改良程序的11技巧
- python--#!/usr/bin/env python与#!/usr/bin/python的区别——转载
- iOS设备相机销毁
- C#通过传入数组生成Lamda表达式
- 如何在ios工程中用oc调用js算法
- 微信JSD验证
- OkHttp使用(四)拦截器
- Java工程师面试题整理 作者:路人甲
- idea中项目导不进去
- no update
- mvc与mvvm区别
- 将文件压缩
- 30个php操作redis常用方法代码例子