我正在开发基于Cordova的iOS项目。我需要创建一个特殊的插件:首先它必须从应用程序的iOS层调用,而不是从JS端启动。
我很清楚,通常一个插件的生命周期是在JS中启动的,然后cordova.exec调用本机层,实例化CDVPluginResult,然后通过该层调用JS部件。
但我的插件必须有不同的生命周期。我需要从iOS本机部分开始整个事情,这将调用JS层。
我该如何实现?
感谢您的帮助。
答案 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,如前面的示例所示。