用Swift编写的Cordova插件没有通过cordova.exec调用插件

时间:2015-04-08 03:41:45

标签: cordova swift cordova-plugins cordova-ios

我将CordovaLib 3.8.0添加到Swift项目中(作为独立的Web视图(Cleaver),而不是完全基于Cordova的项目)。为此,我按照PhoneGap网站上的说明进行操作,然后创建并添加了以下briding header:

//  Cordova-Bridging-Header.h

#import <Cordova/CDV.h>

然后我创建了一个简单的插件:

// HelloPlugin.swift

import Foundation

@objc(HelloPlugin) class HelloPlugin: CDVPlugin {


    override func pluginInitialize() {

        super.pluginInitialize();

    }


    func sayHello( command: CDVInvokedUrlCommand ) {

        let pluginResult = CDVPluginResult(status: CDVCommandStatus_OK, messageAsString: "hello");

        commandDelegate.sendPluginResult( pluginResult, callbackId: command.callbackId );

    }


}

然后我将它添加到我的config.xml

// config.xml

[...]

<feature name="HelloPlugin">
    <param name="ios-package" value="HelloPlugin" />
    <param name="onload" value="true" />
</feature>

当我运行我的应用程序(在模拟器中)时,我看到cordova和插件都在加载:

2015-04-07 20:28:09.277 Test[32687:4349827] Apache Cordova native platform version 3.8.0 is starting.
2015-04-07 20:28:09.278 Test[32687:4349827] Multi-tasking -> Device: YES, App: YES
2015-04-07 20:28:09.279 Test[32687:4349827] Unlimited access to network resources
2015-04-07 20:28:09.362 Test[32687:4349827] [CDVTimer][helloplugin] 0.042975ms
2015-04-07 20:28:09.362 Test[32687:4349827] [CDVTimer][TotalPluginStartup] 0.176013ms

但是,如果我通过safari进入JS控制台并尝试调用我的sayHello函数,我什么也得不回来。

// JS (ran manually on console)

cordova.exec(

  // success
  function(){

    console.log( 'success ->', this, arguments );

  }, 

  // failure
  function(){

    console.log( 'fail ->', this, arguments );

  }, 

  // plugin name
  'HelloPlugin',

  // method name
  'sayHello', 

  // arguments
  ['a', 'b', 2]

);

然后我进入CDVViewController.m并在URL方案处理程序中放置一个断点:

- (BOOL)webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL* url = [request URL];

    /*
     * Execute any commands queued with cordova.exec() on the JS side.
     * The part of the URL after gap:// is irrelevant.
     */
    if ([[url scheme] isEqualToString:@"gap"]) {

我发现执行cordova.exec()时根本没有调用此代码。我在一个Objective-C项目的同一个地方放了一个断点,我用它基本上以同样的方式使用Cordova,并且断点触发。

我有什么遗失或应该尝试的吗?

0 个答案:

没有答案