Cordova 插件 Javascript 函数调用来自 iOS 4.0.0 中的 Native
Cordova Plugin Javascript Function call from Native in iOS 4.0.0
我正在尝试从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>
这对我有用。
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React Native FBSDK中的AccessToken问题
- react native中的动态颜色
- React Native 中的未知模块“child_process”
- 如何通过React Native中的组件共享登录状态
- 如何在React Native中为ListView中的每个元素绑定函数
- IFRAME和谷歌应用程序脚本中的NATIVE模式
- 如何将异步函数的返回分配给React Native中的变量
- 无法解析react Native项目中的解析react
- 通过 React Native 中的 Navigator 传递套接字
- React Native Android 原生 UI 组件中的自定义事件
- alignItems:center防止React Native中的弹性行文本换行
- 将 Picker 绑定到 React Native 中的 Picker.Item 列表
- Cordova 插件 Javascript 函数调用来自 iOS 4.0.0 中的 Native
- 将参数传递给React Native中的组件
- 如何在C++内部的Google Native Client中获取数组中的值的总和
- React Native中的谷歌字体
- React Native中的远程错误日志记录
- 如何在运行时更改react-native中的Navigator左键
- Webpack在生产环境中的应用:为什么会出现React Native错误