iOS上的Cordova 3.0:未调用插件方法

时间:2013-10-28 12:06:07

标签: ios plugins cordova native

我正在尝试按照此处的指南进行操作:

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

1 个答案:

答案 0 :(得分:2)

经过一些研究和挖掘代码后,它似乎是一个Phonegap / Cordova错误。

只有将CDVViewController作为子视图添加到常规UIViewController时才会出现此问题。

在这种情况下,类CDVURLProtocol的viewControllerForRequest方法无法找到正确的ViewController类。我只是做了一个快速黑客攻击并且无论如何都返回我唯一的CDVViewController。

也许我会修复它并稍后提交补丁。