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");

效果:

屏幕快照 2016-09-26 上午8.06.50.png

二、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()效果图如下

Simulator Screen Shot 2016年9月26日 上午8.41.50.png

jstest2()效果图如下

Simulator Screen Shot 2016年9月26日 上午8.42.44.png

当然也可以像最后一行alert('登录成功!');那样,直接写一个js的函数

效果如下:

Simulator Screen Shot 2016年9月26日 上午8.28.38.png

三、参考文章


☟☟可点击下方广告支持一下☟☟

最后修改:1970 年 01 月 01 日
请我喝杯可乐,请随意打赏: ☞已打赏列表