自定义Cordova插件

时间:2012-09-22 12:16:16

标签: windows-phone-7 cordova phonegap-plugins cordova-2.0.0

我正在尝试为Cordova 2.0.0编写自定义插件。 我要制作的自定义插件必须获得WP强调颜色,因此我可以在应用程序样式中使用它。

但我无法使其正常运作,并且无法弄清楚我做错了什么。

Index.js

function onDeviceReady() {
    click();
}
function click() {
    navigator.notification.alert(callback, callback, "text", "button");
    window.getAccentColor();
}

GetTheme.cs

namespace Cordova.Extension.Commands
 {
   // Use the phonegap base class
   public class GetTheme : BaseCommand 
   {
     public void Get()
     {
         Color currentColorHex = (Color)Application.Current.Resources["PhoneAccentColor"];
         var result = new PluginResult(PluginResult.Status.OK, currentColorHex.ToString());
         DispatchCommandResult(result);
     }
   }
 }

GetTheme.js

window.getAccentColor = function () {
    cordova.exec(win, error, "GetTheme", "Get");
}

function win(result) {
    console.log(result);
    console.log("2");
};


function error() {
}

我注意到有些事情有点奇怪。 通过点击操作弹出通知" 2"写在输出中。但没有它就不能输出任何东西。

在这两种情况下,来自result函数的win仍为空,并且不会输出任何内容。

所有* .js文件都包含在head部分的index.html文件中。 通知中的回调方法已定义,但它什么也没做。

我也尝试使用WP7CordovaClassLib.Cordova.Commands命名空间。

3 个答案:

答案 0 :(得分:0)

来自Cordova documentation page

// all JS callable plugin methods MUST have this signature!
// public, returning void, 1 argument that is a string

所以,在你的GetTheme.cs中,改变

     public void Get()

进入

     public void Get(string options) 

答案 1 :(得分:0)

找到这些问题的答案将有助于您(和我们)理解为什么您的插件没有被调用....

  • 是否正在调用onDeviceReady?
  • 是否正在点击?
  • 这看起来很陌生“navigator.notification.alert(回调,
    回调,“文本”,“按钮”);“应该做什么”
  • VS.NET的输出窗口是否显示任何JS错误 阻止js的其余部分执行?

答案 2 :(得分:0)

这个C#部分与我的插件完全相同,所以我认为没问题。

然而,javascript部分是不同的。这是我的完整plugin.js(非常简单的插件,可以启动Windows Phone上的create-new-sms任务,因为它不响应导航到短信:方案就像iOS和Android)

function SMSComposer() {
    this.resultCallback = null;
}

SMSComposer.prototype.showSMSComposer = function (toRecipients, body) {

    var args = {};
    var smsComposerOk = function () { console.log("SMSComposer Called OK"); };
    var smsComposerError = function (error) { console.log("SMSComposer error:" + error); };
    if (toRecipients) {
        args.toRecipients = toRecipients;
    }

    if (body) {
        args.body = body;
    }

    Cordova.exec(smsComposerOk, smsComposerError, "SendSMS", "send", args);
};

SMSComposer.install = function () {
    console.log("SMSComposer being installed");
    if (!window.plugins) {
        window.plugins = {};
    }
    window.plugins.SMSComposer = new SMSComposer();

    return window.plugins.SMSComposer;
};

在我的onDeviceReady()中我有.....

    if (window.device && window.device.platform == "WinCE") {
        SMSComposer.install();
    }

我正在使用Cordova 2.0。 确保检查控制台是否有日志消息。如果Cordova在某处失败,则会记录一些内容。