Cordova Plugin Javascript函数调用来自iOS 4.0.0中的Native

时间:2016-01-28 15:56:35

标签: javascript ios cordova

我正在尝试从cordova iOS 4.0.0中的本机插件调用javascript函数。 在之前的cordova ios版本3.9.2中,我可以从本机插件中调用任何javascript函数。

- (void)PlayMp3:(CDVInvokedUrlCommand*)command
{       

    NSString* callbackId = [command callbackId];
    NSString* name = [[command arguments] objectAtIndex:0];
    NSString* msg = [NSString stringWithFormat: @"Hello, %@", name];

    CDVPluginResult* result = [CDVPluginResult
                               resultWithStatus:CDVCommandStatus_OK
                               messageAsString:msg];

    MainViewController* viewController = (MainViewController*)self.viewController;

    NSString *jsCallBack = [NSString stringWithFormat:@"setPlayStatus();"];
    [viewController.webView stringByEvaluatingJavaScriptFromString:jsCallBack];

    [self success:result callbackId:callbackId];
}

但在Cordova iOS 4.0.0中,我无法像上面那样调用javascript函数setPlayStatus()。因为viewController.webview不是UIWebView类型。它是UIView。所以我试图喜欢这个。

- (void)PlayMp3:(CDVInvokedUrlCommand*)command
{
    CDVPluginResult* pluginResult = nil;
    NSString* echo = [command.arguments objectAtIndex:0];

    if (echo != nil && [echo length] > 0) {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];
    } else {
        pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
    }

    WKWebView* webview = (WKWebView*)self.viewController.view;

    NSString *jsCallBack = [NSString stringWithFormat:@"setPlayStatus();"];
   [webview evaluateJavaScript:@"setPlayStatus();" completionHandler:nil];

    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}

但它没有用。如何在Cordova插件iOS 4.0.0中调用本机cordova插件中的javascript函数?

5 个答案:

答案 0 :(得分:2)

谢谢大家。我已经完成了。CDVPlugin有一个commandDelegate。此commandDelegate可以使用javascript函数调用evalJS函数。 所以我试着这样做。

[self.commandDelegate evalJS:@"setPlayStatus()"];

之后调用setPlayStatus()函数。

答案 1 :(得分:1)

我刚刚快速阅读了Cordova iOS插件代码,看起来self.viewController.webView通过webEngine持有UIWebView。它可能是其中之一。

您应该在投射前使用isKindOfClass:进行检查。

编辑:更好:引擎是一个具有此协议的协议:

- (void)evaluateJavaScript:(NSString*)javaScriptString completionHandler:(void (^)(id, NSError*))completionHandler;

使用:

[self.viewController.webViewEngine evaluateJavaScript:@"setPlayStatus();" completionHandler:nil]

答案 2 :(得分:0)

我已经尝试过,这对我有用

[self.webViewEngine evaluateJavaScript:[NSString stringWithFormat:@"funcName(%@)",yourparam]]

答案 3 :(得分:0)

在@Tim Rogers的答案中输入错字,它应该是evalJs而不是evalJS:

where()

它适用于Cordova ios 4.1.1

抱歉,我没有50个声誉来添加评论,所以必须在这里添加新答案

答案 4 :(得分:0)

我遇到了同样的问题,我尝试在下面的代码中从本机调用.js调用,并且我再次使用Cordova.exec发送参数

[self.webViewEngine evaluateJavaScript:[NSString stringWithFormat:@"setPlayStatus()"];   

以下功能必须在config.xml中添加

<feature name="setPlayStatus">
        <param name="ios-package" value="setPlayStatus" />
        <param name="onload" value="true" />
   </feature>

这适合我。