mui框架是一个h5框架,当然可以通过普通的js和oc互调,但是他有自己的调用方法,用起来很简单。
一、js调用oc
js调用oc只需要导入对应的类,然后调用方法即可,比如testDemo这个类中有一个单例和两个输出函数
testDemo.m#import "testDemo.h"
static testDemo*test = NULL;
@implementation testDemo
+(testDemo*)Instantce
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
test =[[testDemo alloc] init];
});
return test;
}
-(void)testss
{
NSLog(@"testss");
}
-(void)testLog:(NSString*)sss
{
NSLog(@"%@",sss);
[self testjs];
}
那么在js中直接可以这么调用即可var s = plus.ios.importClass("testDemo");
s.Instantce().testss();
s.Instantce().testLog("hudong");
效果:
二、oc调用js
在MUI中,如果oc调用js的话,不太好,有一个变通的方式就是函数在oc中实现,在js中,通过js调用oc的结果来判断,如果非要用oc调用js的话,可以使用oc中的webview的一个stringByEvaluatingJavaScriptFromString的方法,但是这个相当于调用某个html文件中的某个js函数,其他的函数并未调用。就比如页面在a.html中,a.html中有一个变量b需要在a的其他函数中使用,如果这里oc直接调用了js的某个函数,去改变了b值,其实只是修改了当前页面的b值,并没有对a.html整个函数逻辑产生影响,所以现在我的方案就是oc不去调用js的函数,使用js调用oc的结果。
当然这里说下stringByEvaluatingJavaScriptFromString的使用方法,在index.html文件中写入两个函数function jstest () {
alert("ddddd");
}
function jstest2 (e) {
alert(e);
}
然后在oc中可以这么调用
-(void)testjs{
self.myweb =[[UIWebView alloc] init];
NSURL*url = [[NSBundle mainBundle] URLForResource:@"Pandora/apps/HelloH5/www/index.html" withExtension:nil];
NSURLRequest*request = [NSURLRequest requestWithURL:url];
self.myweb.delegate =self;
[self.myweb loadRequest:request];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
BOOL isExist = [[self.myweb stringByEvaluatingJavaScriptFromString:@"typeof jstest == \'function\';"] isEqualToString:@"true"];
NSLog(@"%d",isExist);
[self.myweb stringByEvaluatingJavaScriptFromString:@"jstest();"];
[self.myweb stringByEvaluatingJavaScriptFromString:@"jstest2(\"hudong\");"];
// [self.myweb stringByEvaluatingJavaScriptFromString:@"alert('登录成功!');"];
}
self.myweb是一个webview,在这个webview加载完成之后,调用jstest的函数即可
jstest()效果图如下
jstest2()效果图如下
当然也可以像最后一行alert('登录成功!');那样,直接写一个js的函数
效果如下:
三、参考文章版权属于:胡东东博客
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
☟☟如文章有用,可点击一次下方广告支持一下☟☟