我正在尝试按照位于此处的指南进行操作:
http://docs.phonegap.com/en/3.1.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide
尤其是这个
http://docs.phonegap.com/en/3.1.0/guide_platforms_ios_plugin.md.html#iOS%20Plugins
我完全按照所有步骤操作,但插件无法正常工作。当我尝试调用 JavaScript 部分时, native echo 方法没有被执行。
为了确保插件已加载,我实现了 pluginInitialize 方法。插件似乎加载正常。
日志输出:
2013-10-28 13:04:16.824 AirPrototype[2288:18e03] Multi-tasking -> Device: YES, App: YES
2013-10-28 13:04:16.840 AirPrototype[2288:18e03] Echo plugin init.
2013-10-28 13:04:16.841 AirPrototype[2288:18e03] [CDVTimer][echo] 0.748992ms
2013-10-28 13:04:16.841 AirPrototype[2288:18e03] [CDVTimer][TotalPluginStartup] 1.354039ms
实现:
#import "Echo.h"
#import "../Cordova/CDV.h"
#import "../Cordova/CDVPlugin.h"
@implementation Echo
- (void)echo:(CDVInvokedUrlCommand*)command
{
CDVPluginResult* pluginResult = nil;
NSString* echo = [command.arguments objectAtIndex:0];
if (echo != nil && [echo length] > 0) {
NSLog(@"echo called with arg %@",echo);
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];
} else {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
}
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
- (void)pluginInitialize
{
NSLog(@"Echo plugin init.");
}
@end
我已经注册了这个插件:
<feature name="Echo">
<param name="ios-package" value="Echo" />
<param name="onload" value="true" />
</feature>
创建了一个 javascript 函数定义:
window.echo = function(str, callback) {
cordova.exec(callback, function(err) {
callback('Nothing to echo.');
}, "Echo", "echo", [str]);
};
调用插件
window.echo('echome', function(echoValue) {
alert(echoValue == 'echome'); // should alert true.
});
但它不起作用。
我只注意到 Safari 调试器提示:
无法加载资源:在此服务器上找不到请求的 URL。
没有找到的 URL 好像是 file:///!gap_exec?1382961871341
有人遇到过这个问题吗?还是我做错了什么?我在这里缺少什么?
非常感谢任何建议。
问候语 国 session 员
最佳答案
经过一些研究和挖掘代码后,它似乎是一个 Phonegap/Cordova 错误。
只有在将 CDVViewController 作为 subview 添加到常规 UIViewController 时才会出现此问题。
在这种情况下,类 CDVURLProtocol 的 viewControllerForRequest 方法无法找到正确的 ViewController 类。我只是做了一个快速 hack hack 并在任何情况下返回我唯一的 CDVViewController。
也许我会修复它并稍后提交补丁。
关于ios - iOS 上的 Cordova 3.0 : Plugin method not being called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19634361/