我正在尝试按照此处的指南进行操作:
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部分时,没有执行本机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。
找不到的网址似乎是file:///!gap_exec?1382961871341
有人有这个问题吗?或者我做错了什么?我在这里缺少什么?
任何建议都受到高度赞赏。
问候 MP
答案 0 :(得分:2)
经过一些研究和挖掘代码后,它似乎是一个Phonegap / Cordova错误。
只有将CDVViewController作为子视图添加到常规UIViewController时才会出现此问题。
在这种情况下,类CDVURLProtocol的viewControllerForRequest方法无法找到正确的ViewController类。我只是做了一个快速黑客攻击并且无论如何都返回我唯一的CDVViewController。
也许我会修复它并稍后提交补丁。