我正在尝试从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函数?
答案 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>
这适合我。