iOS(OC\swift)-javascript交互

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。

swift调用js

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

你可能感兴趣的:(iOS(OC\swift)-javascript交互)