ios - iOS 上的 Cordova 3.0 : Plugin method not being called

标签 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 部分时, 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/

相关文章:

ios - 是否需要 bitcode 以允许用户仅下载目标设备所需的可执行架构?

ios - 创建用于从本地下载 iOS 应用程序的 SSL 本地网络

java - 以标准化方式将对象传递给接口(interface)/抽象类

javascript - Cordova OnsenUI 应用程序中的 Google map V3( map 显示在浏览器中,但不在手机上)

javascript - Cordova - CSP 拒绝加载媒体 blob

ios - swift ios 如何从 Collection View 访问数据

ios - 如何定位背景图像以填满屏幕?

.net - Visual Studio 的自定义 "Run/Debug in X"命令/插件

使用带有数据的 Runtime.getRuntime.exec 错误的 kotlin 中的 CURL POST 请求

android - 找不到模拟器图像 (avds) OS X ionic