我目前正在开发使用科尔多瓦(PhoneGap的),骨干网和JQtouch web应用程序。 别的不说,我需要添加事件在用户的日历。
一切工作正常在Android上。 我仍在使用科尔多瓦2.0.0。 (我没有升级到最新版本)。 滚动的作品,导航是确定的,而且我可以在我的日历添加事件!
在iPhone上,它是不同的。 因为我想我的应用程序在iOS 6的工作,我得到了科尔多瓦在我的Mac 2.2.0。 从那时起,我不能添加在日历事件了。 它的工作(在iPhone上)与科尔多瓦2.0.0,但不是现在。
经过调查,我发现cordova.exec()是不确定的 。
我搜索了很多关于这个问题,但似乎没有人,除了我,遇到了这个问题现在。
下面是与科尔多瓦2.0.0工作,但不能与科尔多瓦2.2.0的代码示例:
calendar.js,对科尔多瓦日历插件。 我没有写它。 在Android上我得到“cordova.exec定义”,而iOS上我得到了另外一个消息。
// Cordova Calendar Plugin
// Author: Felix Montanez
// Created: 01-17-2012
// Contributors:
// Michael Brooks
function calendarPlugin()
{
}
calendarPlugin.prototype.createEvent = function(title,location,notes,startDate,endDate)
{
if('function' == typeof(cordova.exec)) {
alert("cordova.exec is defined");
} else {
alert("cordova.exec is not defined");
}
cordova.exec(null,null,"calendarPlugin","createEvent", [title,location,notes,startDate,endDate]);
};
calendarPlugin.install = function()
{
if(!window.plugins)
{
window.plugins = {};
}
window.plugins.calendarPlugin = new calendarPlugin();
return window.plugins.calendarPlugin;
};
cordova.addConstructor(calendarPlugin.install);
它调用函数createEvent代码(它的工作,因为我得到了先前的警报)
if (confirm('Do you want to add this event in your calendar?'))
{
calendarPlugin.prototype.createEvent('<%= paramEvent_map %>', 'Geneva',
'Convocation', '<%= paramEvent_startDate %>', '<%= paramEvent_endDate %>');
}
这个问题的一个可能的来源可能是我升级从科尔多瓦2.0.0到2.2.0科尔多瓦的方式:我只是跟着教程“ 升级科尔多瓦2.1.0项目2.2.0 ”。 如果我做了“从2.0.0到2.1.0”,然后“表2.1.0至2.2.0”?
我会很感激的任何建议,关于这一点,因为我真的不希望重新启动我安装的PhoneGap的。
在Mac上,我与山狮10.8和Xcode的工作4.5,和我测试我的应用程序在iOS 4和6在PC上,我和集锦工作室3和Eclipse 3.7.1的工作,而且我测试在Android 2.3。
--- 编辑:重新安装科尔多瓦2.1.0然后升级到2.2.0 ---
我只是删除我的项目,卸载科尔多瓦和“从头开始”重做一切:
- 我安装科尔多瓦从2.1.0 他们的网站 。
- 我升级的Xcode 4.5.2来(推荐)
- 我创建了我复制我的代码部分一个Xcode项目。
- 我跟着他们的教程升级从科尔多瓦2.1.0至2.2.0科尔多瓦
- 我设置“架构”为“ARMv7的,armv7s”和“构建有源体系仅”为“Yes”
- 我说我需要为日历插件框架:EventKit和EventKitUI
然后我编译并运行在我的iPhone 3(与iOS 6)我的项目,并且尚未定义cordova.exec!
--- 编辑:声明我的日历插件作为一个模块 ---
我直接在科尔多瓦 - 2.2.0.js添加日历插件一些代码(我绝望)。
现在,在科尔多瓦-2.2.0.js,我有以下行:( 我在这里得到了他们 )
define("cordova/plugin/calendarplugin", function(require, exports, module) {
var exec = require('cordova/exec');
var calendarPlugin = function() {};
calendarPlugin.prototype.createEvent = function(title,location,notes,startDate,endDate) {
exec(null, null, 'calendarPlugin', 'createEvent', [title,location,notes,startDate,endDate]);
}
var myCalendarPlugin = new calendarPlugin();
module.exports = myCalendarPlugin;
});
所以,我不使用cordova.exec()了,但这个:
var exec = require('cordova/exec');
我的日历“插件”文件现在只包含以下行:
var mycalendarplugin = cordova.require("cordova/plugin/calendarplugin");
这就是我如何用我的新的“模块”:
window.mycalendarplugin.createEvent('<%= paramEvent_map %>', 'Geneva',
'Convocation', '<%= paramEvent_startDate %>', '<%= paramEvent_endDate %>');
而且,奇怪的是,该功能EXEC()被调用!
但是,我得到了以下信息:“ 错误:试图之前调用cordova.exec()‘deviceready’忽略。”当“deviceReady”并没有解雇这应该出现。
可悲的是,这一事件永远不会触发。 所以我现在的问题是略有不同,但仍然存在。
--- 编辑:比较与Android ---
我添加了几行,以监听事件,无论是在Android和iOS:
window.addEventListener('load', function () {
alert("load triggered");
document.addEventListener('deviceready', function () {
alert("PhoneGap is now loaded!");
}, false);
}, false);
在iOS上,我得到的消息“负荷触发”,而不是“PhoneGap的,现在装”。 在那之后,我仍然无法使用EXEC()。
在Android上,我没有得到任何消息都没有。 但我可以用cordova.exec()没有问题。
--- 编辑:从头开始重做项目 ---
而不是创建我与科尔多瓦2.1.0然后再升级到2.2.0科尔多瓦项目,我试图创建一个示例项目直接与科尔多瓦2.2.0则包括它的日历插件(原始版本)。
它工作完全正常! 随着iOS 6的(这需要从用户的明示autorisation)多一点的代码,我可以在我的日历添加事件。
然而,当我加入我的项目(HTML,CSS,JS文件)的其余部分,我得到了同样的错误:cordova.exec是不确定的。
该负责可能是RequireJS,其可以以不同的方式加载科尔多瓦-2.2.0.js。 它与科尔多瓦2.0.0运作良好,但似乎并没有与2.2.0。
我会尝试看看我是否能RequireJS之前加载科尔多瓦 - 2.2.0.js,并仍然使用一次科尔多瓦被加载。
我会继续为您提供最新:)