Cordova - 从iOS本机调用JS插件的一部分

时间:2014-05-13 19:32:59

标签: ios cordova ios7

我正在开发基于Cordova的iOS项目。我需要创建一个特殊的插件:首先它必须从应用程序的iOS层调用,而不是从JS端启动。

我很清楚,通常一个插件的生命周期是在JS中启动的,然后cordova.exec调用本机层,实例化CDVPluginResult,然后通过该层调用JS部件。

但我的插件必须有不同的生命周期。我需要从iOS本机部分开始整个事情,这将调用JS层。

我该如何实现?

感谢您的帮助。

2 个答案:

答案 0 :(得分:15)

现在不推荐使用writeJavascript,您可以使用evalJs

[self.commandDelegate evalJs:@"console.log('foo')"];

答案 1 :(得分:2)

您可以使用:

[self.webView stringByEvaluatingJavaScriptFromString:@"callSomeFunction();"];

或者:

[self writeJavascript:@"doSomeJavaScript"];

如果您想使用Cordova自己的事件机制,可以调用cordova.fireDocumentEvent来触发JavaScript事件(您可以在JS端附加):

[self writeJavascript:
  [NSString stringWithFormat:@"setTimeout( function() { cordova.fireDocumentEvent('%@_%@', {data:'%@'} ) }, 0);", 
  ID, event, data]];

如果您对JavaScript的调用可能会触发警报或调用其他本机代码,则最好使用setTimeout包装JS,如前面的示例所示。