OC与JS的交互
OC调用JS GitHub
这是我写的一个简单OC与JS的交互,这个demo使用的是JavaScriptCore,用了JSExport协议。欢迎大家吐槽!
如果js带两个或者两个以上参数的时候,只需要把js的方法名任意拆分(想怎么拆就怎么拆,但是字母的顺序不能变)
,这样就可以获取到参数了,不过三个以上参数的,建议传json串(个人建议)。
例:js方法 test(string:name,string:pwd);
oc对应的方法可以是- (void)t:(NSString*)name est:(NSString*)pwd;
也可以是- (void)te:(NSString*)name st:(NSString*)pwd;
还可以是 - (void)tes:(NSString*)name t:(NSString*)pwd;
demo中不包含传两个参数的,后期加上。
swift与JS的交互
这是用swift写的,用的是JavaScriptCore。
swift3.0之前是这个方法
jsContext.setObject(self, forKeyedSubscript: "jsobject");
swift3.0之后改成下面的,js就不能调用swift的方法了
jsContext.setObject(self, forKeyedSubscript: "jsobject" as (NSCopying & NSObjectProtocol)!);
开始我以为是这个方法的问题,纠结了好久。后来发现不是这个的问题,其实改起来也很简单,只要在protocol
前加上@objc
就可以了
@objc protocol JSObjectMethods: JSExport
{
func upAction(_ username:String);
func test();
}
如果需要传参数,则需要在参数之前加_
,就可以获取到参数了。
func upAction(_ username:String);
上面这些是我的解决办法,如果不对欢迎吐槽,一起学习。···
上面是UIWebView,下面是swift/OC与JS的交互(WKWebView)的地址,有问题欢迎吐槽。。。
swift 版:Swift-JS GitHub
OC版:OC-JS GitHub