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

Cordova Plugin Javascript Function call from Native in iOS 4.0.0

本文关键字:中的 Native iOS 插件 Javascript 函数调用 Cordova      更新时间:2023-09-26

我正在尝试从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 函数?

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

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

之后调用setPlayStatus()函数。

我只是快速阅读了Cordova iOS插件代码,看起来self.viewController.webView通过webEngine持有UIWebView。 也许可以。

在铸造之前,您应该使用isKindOfClass:进行检查。

编辑:更好的是:引擎是一个协议,具有以下内容:

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

用:

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

@Tim罗杰斯的答案中的一个错别字,应该是 evalJs 而不是 evalJS:

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

它适用于科尔多瓦ios 4.1.1

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

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

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

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

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

您必须在配置中添加以下功能.xml

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

这对我有用。