【MUI】JavaScript和Object-C相互调用

JS调用OC

例一

testDemo.m

oc代码:

+(void)getText:(NSString*) text
{
        NSLog(@"获取内容:%@",text);
}

js代码:

var myString = plus.ios.importClass("testDemo").getText("content");


oc代码:

-(void)getSecondText:(NSString*) text{}

js代码:

var myClass = plus.ios.importClass("testDemo");
var newStr = new myClass();
var mySecondString = newStr.getSecondText("content");


例二

oc代码:
[[NSUserDefaultsstandardUserDefaults]setBool:true forKey:@"demo_test"];

js代码:
var myBool =
plus.ios.importClass("NSUserDefaults").standardUserDefaults().boolForKey("demo_test");


OC调用JS

在MUI中,oc调用js不太好,有一个变通的方式就是函数在oc中实现,在js中,使用js调用oc的结果,如果非要用oc调用js的话,可以使用oc中的webview的一个stringByEvaluatingJavaScriptFromString的方法,但是这个相当于调用某个html文件中的某个js函数,其他的函数并未调用!
比如页面在demo.html中,demo.html中有一个变量aaa需要在demo.html的其他函数中使用,如果这里oc直接调用了js的某个函数,去改变了aaa值,其实只是修改了当前页面的aaa值,并没有对demo.html整个逻辑产生影响,所以目前的方案就是oc不去调用js的函数,使用js调用oc的结果


oc代码:
-(void)testjs {

self.wysweb=[[UIWebViewalloc]init];

NSURL*url=[[NSBundlemainBundle];

URLForResource:@"Pandora/apps/HelloH5/www/index.html"withExtension:nil];

NSURLRequest * request = [NSURLRequestrequestWithURL:url];

self.wysweb.delegate=self;

[self.wysweb loadRequest:request];

}


-(void)webViewDidFinishLoad:(UIWebView*)webView {

[self.wysweb stringByEvaluatingJavaScriptFromString:@"jstest1();"];

[self.wysweb stringByEvaluatingJavaScriptFromString:@"jstest2(\"wys\");"];

}

js代码:
function  jstest1() {

alert("success");

}

function  jstest2(string) {

alert(string);

}

推荐阅读更多精彩内容