您的位置:

ios中仿支付宝js与oc交互,ios和js交互

ios中仿支付宝js与oc交互,ios和js交互

更新:

本文目录一览:

iOS开发(OC)——支付宝支付

1、首先在支付宝开发者平台上创建应用,并按照开发者平台上的步骤把SDK接入,配置环境(这些步骤支付宝开发者平台写的很清楚,下面我主要写一些开放平台没有,或者需要注意的地方)

2、导入头文件 #import AlipaySDK/AlipaySDK.h (如果报错,则是缺少某些类库或者静态库和头文件路径没有设置好,请仔细查看并按照开放平台的步骤检查,或者看一下这个: )

3、iOS 8.0以下重写下面方法

4、iOS 9.0以上实现下面的方法(也就是说,如果app要兼容iOS 8.0以上,则步骤3和步骤4的方法都要实现)

5、发起支付

注意:为了支付完成后能成功返回app,需要在info.plist文件中设置URL scheme,并且这个值是唯一的(最好填写bundel id 或者开放平台上的app ID),详细步骤在支付宝开放平台的接入文档有

OC与JS交互-WKWebView篇

oc 跟 js 端协议好方法名 比如 js 的方法为 Back()

1.oc 对 js 的方法进行监听

[config.userContentController addScriptMessageHandler:self name:@"Back"];

2.oc 设置代理并且导入代理 

WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler

self.webView.UIDelegate = self;

self.webView.navigationDelegate = self;

3.实现代理

- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message;

4.离开页面的时候移除监听

[config.userContentController removeScriptMessageHandlerForName:@"Back"];

1.创建按钮 并且实现按钮的回调

input type="button" value="返回按钮" onclick="backClick()" /

2.按钮的响应方法中添加发送消息到 OC (可以携带参数)

 functionbackClick() {window.webkit.messageHandlers.Back.postMessage('固定写的 js 值--点击了返回');}

1.OC 添加对 JS 的消息监听,实现代理对监听的实现方法。

2.JS 端在合适的时机发送消息,并且可以携带参数。

js 跟 oc 端协议好方法名 比如 js 的方法为 transferPrama(str)

//oc 在合适的时机调用 js 方法(可以传参数)

NSString* paramString =@"我是 OC 调用 JS";

NSString* jsStr = [NSStringstringWithFormat:@"transferPrama('%@')",paramString];

 [self.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) {NSLog(@"result=%@  error=%@",result, error);}];

//js需要定义一个对应的方法供 OC 调用

functiontransferPrama(str) {

document.getElementById("secondid").value = str;

}

- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message

- (void)evaluateJavaScript:(NSString*)javaScriptString completionHandler:(void(^_Nullable)(_Nullableid,NSError*_Nullableerror))completionHandler;

愤怒的牛牛的

愤怒的牛牛的新浪博客

愤怒的牛牛的GitHub

OC仿支付宝返回到后台添加模糊效果

最近在使用支付宝的过程中发现当支付宝运行在手机后台,我们双击Home键切换app的时候,支付宝为了保护用户隐私会添加模糊效果。自己就模仿着实现了一下,先说一下我的实现思路:

获取到当前window的截屏图片并保存到沙盒,然后在下面这个方法里面将你创建的覆盖window上view显示出来

在app将药进入前台的时候将你创建覆盖在window上的view移除掉

图片高斯模糊效果的实现

屏幕截图的实现

保存沙盒的实现

读取沙盒截图的实现

demo的 传送门

如果对您有帮助,顺便给个✨吧!

JS与OC交互、js事件注入、修改js方法实现

由于UIWebview即将废弃,相比较于WKWebview,通过测试即可发现UIWebview占用更多内存,且内存很夸张。WKWebView网页加载速度也有提升,但是并不像内存那样提升那么多。下面列举一些其它的优势:

WKScriptMessageHandler是因为我们要处理JS调用OC方法的请求。

WKScriptMessage有两个关键属性name 和 body。

因为我们给每一个OC 方法取了一个name,那么我们就可以根据name 来区分执行不同的方法。body 中存着JS 要给OC 传的参数。

ocAddAction方法在js文件中并没有定义

实现WKNavigationDelegate协议方法,执行之后会在WKScriptMessageHandler代理方法中拦截到 ocZRAction

动态修改alert系统函数的实现,当js中调用alert函数时,触发的是我们自定义方法

URL Scheme拦截的问题,这里不做赘述,请看 demo

JS注入详情

参考链接:

链接一

链接二

iOS - OC 与 JS 交互六种方式总结

在 APP 中,免不了与 H5页面打交道,所以掌握 与 JS 交互就显的至关重要,本文总结了常见的与 JS 交互方式。

注意事项

在 OC 原生中

在 html 文件中

早期的JS与原生交互的开源库很多都是用得这种方式来实现的,例如:PhoneGap、 WebViewJavascriptBridge 。

效果图

使用WKNavigationDelegate中的代理方法,拦截自定义的 URL 来实现 JS 调用 OC 方法。

注意点

关于如何区分执行不同的OC 方法,也与UIWebView的处理方式一样,通过URL 的host 来区分执行不同的方法:

JS 调用OC 方法后,有的操作可能需要将结果返回给JS。这时候就是OC 调用JS 方法的场景。

WKWebView 提供了一个新的方法 evaluateJavaScript:completionHandler: ,实现OC 调用JS 等场景。

注意点

运行结果

在iOS 7之后,apple添加了一个新的库JavaScriptCore,用来做JS交互,因此JS与原生OC交互也变得简单了许多。

首先导入JavaScriptCore库, 然后在OC中获取JS的上下文。

再然后定义好JS需要调用的方法,例如JS要调用share方法:

则可以在UIWebView加载url完成后,在其代理方法中添加要调用的share方法:

OC 调用 JS 方法有多种,首先介绍使用JavaScriptCore框架的方式。

使用JSContext 的方法 -evaluateScript ,可以实现 OC 调用 JS 方法

效果图

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

创建 WKWebViewConfiguration 对象,配置各个API对应的MessageHandler。

然后在界面即将显示的时候添加MessageHandler

需要注意的是addScriptMessageHandler很容易引起循环引用,导致控制器无法被释放,所以需要移除MessageHandler

这里实现了两个协议 WKUIDelegate,WKScriptMessageHandler , WKUIDelegate 是因为我在JS中弹出了alert 。 WKScriptMessageHandler 是因为我们要处理JS调用OC方法的请求。

WKScriptMessage 有两个关键属性 name 和 body 。

因为我们给每一个OC 方法取了一个name,那么我们就可以根据name 来区分执行不同的方法。body 中存着JS 要给OC 传的参数。

关于参数body 的解析,我就举一个body中放字典的例子,其他的稍后可以看demo。

解析JS 调用OC 实现分享的参数:

message.boby 就是JS 里传过来的参数。我们不同的方法先做一下容错性判断。然后正常取值就可以了。

下面只列举一个shareClick()方法,其他看Demo

这里使用WKWebView 实现OC 调用JS方法与之前说的文章一样,通过

- evaluateJavaScript:completionHandler:

效果图如下图所示

详情看下面文章链接

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

详情看下面文章链接

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

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

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

iOS 下 JS 与 OC 互相调用(三) - WKWebView 拦截 URL

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

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

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

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

在Cocos2d-JS v3.0 RC2中,与Android上js调用Java一样,Cocos2d-JS也提供了在iOS和Mac上js直接调用Objective-C的方法,示例代码如下:

1 var ojb = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....);

在 jsb.reflection.callStaticMethod 方法中,我们通过传入OC的类名,方法名,参数就可以直接调用OC的静态方法,并且可以获得OC方法的返回值。

•参数中的类名,只需要传入OC中的类名即可,与Java不同,类名并不需要路径。比如你在工程底下新建一个类 NativeOcClass ,只要你将他引入工程,那么他的类名就是 NativeOcClass ,你并不需要传入它的路径。

1 import Foundation/Foundation.h @interface NativeOcClass : NSObject +( BOOL )callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content; @end

方法

•js到OC的反射仅支持OC中类的静态方法。

•方法名比较要需要注意,我们需要传入完整的方法名,特别是当某个方法带有参数的时候,你需要将他的:也带上。根据上面的例子。此时的方法名字是callNativeUIWithTitle:andContent:,不要漏掉了他们之间的:。

•如果是没有参数的函数,那么他就不需要:,如下代码,他的方法名是 callNativeWithReturnString ,由于没有参数,他不需要:,跟OC的method写法一致。

1 +(NSString *)callNativeWithReturnString;

使用示例

•下面的示例代码将调用上面 NativeOcClass 的方法,在js层我们只需要这样调用:

1234 var ret = jsb.reflection.callStaticMethod( "NativeOcClass" , "callNativeUIWithTitle:andContent:" , "cocos2d-js" , "Yes! you call a Native UI from Reflection" );

•这里是这个方法在OC的实现,可以看到是弹出一个native的对话框。并把 title 和 content 设置成你传入的参数,并返回一个boolean类型的返回值。

123 +( BOOL )callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content{ UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:content delegate:self cancelButtonTitle:@ "Cancel" otherButtonTitles:@ "OK" , nil]; [alertView show]; return true ; }

•此时,你就可以在 ret 中接受到从OC传回的返回值(true)了。

注意

在OC的实现中,如果方法的参数需要使用float、int、bool的,请使用如下类型进行转换:

•float,int 请使用NSNumber类型

•bool请使用BOOL类型。

•例如下面代码,我们传入2个浮点数,然后计算他们的合并返回,我们使用NSNumber而不是int、float去作为参数类型。

1 +( float ) addTwoNumber:(NSNumber *)num1 and:(NSNumber *)num2{ float result = [num1 floatValue]+[num2 floatValue]; return result;}

•目前参数和返回值支持 int, float, bool, string,其余的类型暂时不支持。

ios中仿支付宝js与oc交互,ios和js交互

本文目录一览: 1、iOS开发(OC)——支付宝支付 2、OC与JS交互-WKWebView篇 3、OC仿支付宝返回到后台添加模糊效果 4、JS与OC交互、js事件注入、修改js方法实现 5、iOS

2023-12-08
iphonejs和ios交互,ios与js交互

本文目录一览: 1、iOS - OC 与 JS 交互六种方式总结 2、js怎么跟Android和ios进行交互呢? 3、iOS 原生与JS交互 (webkit + js) 4、原生APP中js怎样与A

2023-12-08
ios与js交互方式,ios交互设计

本文目录一览: 1、JS怎么样调用IOS并且传递参数? 2、js怎么跟Android和ios进行交互 3、iOS - OC 与 JS 交互六种方式总结 4、原生APP中js怎样与Android和ios

2023-12-08
ios原声js交互(ios原生与js交互的原理是什么)

本文目录一览: 1、iOS - OC 与 JS 交互六种方式总结 2、JS和IOS进行交互 3、iOS WKWebView JS 与 原生交互小结 4、iOS中WkWebView与js交互 5、原生A

2023-12-08
iosjs交互问题(ios与js交互原理)

本文目录一览: 1、iOS Swift5.0 WKWebView使用JS与Swift交互 2、iOS - OC 与 JS 交互六种方式总结 3、iOS中WkWebView与js交互 4、JS和IOS进

2023-12-08
js和webview,Js和webview交互

2022-11-23
createjs与js交互的简单介绍

本文目录一览: 1、如何使用Createjs来编写HTML5游戏使用EaselJS中的制作Sprite类制作 2、iOS - OC 与 JS 交互六种方式总结 3、createjs和lufylegen

2023-12-08
ios运行jsapp(ios运行内存怎么查看)

本文目录一览: 1、原生APP中js怎样与Android和ios进行交互 2、android(ios)设备通过js打开手机上存在的app.... 3、如何启用javascript在Safari和iOS

2023-12-08
webview交互js,webview html5

本文目录一览: 1、iOS下webView和JS交互 2、iOS中WkWebView与js交互 3、android中webview与js交互 iOS下webView和JS交互 下面说一下使用方法 申明

2023-12-08
包含处理ios系统里js的词条

本文目录一览: 1、如何在IOS平台上使用js直接调用OC方法 2、iOS 调用本地.js文件的方法 3、iOS - OC 与 JS 交互六种方式总结 如何在IOS平台上使用js直接调用OC方法 本例

2023-12-08
ios原生调用jsapi,ios原生app

本文目录一览: 1、如何用js调用ios 2、iOS - OC 与 JS 交互六种方式总结 3、原生APP中js怎样与Android和ios进行交互 4、如何用JS调用几十万原生API 如何用js调用

2023-12-08
js打包ios(JS打包成安卓)

本文目录一览: 1、html+js做的网站,想做成APP怎么封装呢 2、iOS打包Framework静态库,从Framework里加载本地html,怎么加载 3、用这个auto.js编程软件写好脚本后

2023-12-08
webviewjs事件,webview 执行js

2022-11-25
js和数据库交互,js与数据库

本文目录一览: 1、JS怎么和数据库交互 2、node.js 与后台数据库 怎么交互 3、javascript如何与后台数据库交互 4、js能不能数据库连接 JS怎么和数据库交互 这里面关联的全掏出来

2023-12-08
js调用c怎么调(js调用c语言接口)

本文目录一览: 1、JavaScript-js和c语言可以相互调用吗 2、如何在 iOS 平台上使用 Javascript 直接调用 Objective-C 方法 3、js中方法调用疑问 4、js里怎

2023-12-08
php和ios交互,iphone php

2022-11-22
js和php服务端tcp(php与js交互)

本文目录一览: 1、PHP如何与JS进行交互? 2、js和php在同一个文件中相互获取值的问题 3、学php和js哪个好啊 4、Js和Php的区别是什么? PHP如何与JS进行交互? PHP的所有应用

2023-12-08
js全栈ios,JavaScript全栈

本文目录一览: 1、什么是全栈工程师? 2、全栈学什么后台语言好?去哪学比较好? 3、web前端全栈开发,该怎么学 4、从前端到全栈难吗? 5、要想成为一名全栈工程师,需要掌握哪些知识? 什么是全栈工

2023-12-08
ios和php交互问题,ios php开发环境

2023-01-05
使用JSBridge进行跨平台交互的技巧分享

2023-05-17