0

我正在将 Phonegap 2.7 应用程序移植到 Phonegap 3。该应用程序是托管的,因此 phonegap 加载外部 url 而不是本地 html。这个托管的 webapp 加载cordoba.js,但是我无法使用来自托管 webapp 的插件,例如启动画面和通知:

navigator.splashscreen.hide(); 
// Uncaught TypeError: Cannot call method 'hide' of undefined

navigator.notification.vibrate(500);
// Uncaught TypeError: Cannot call method 'vibrate' of undefined

托管应用程序需要与我创建 Phonegap 3 项目时包含的相同的 Cordova 文件。为什么我无法使用此 API?这在 Phonegap 2.7 上运行良好。

更新:事件被正确触发:

document.addEventListener('deviceready', callback, false);

callback被正确调用,因此已经存在某种科尔多瓦交互。问题似乎是插件。

4

2 回答 2

1

使用 cordova.exec 直接调用插件。它是这样的:

cordova.exec(function(response){}, function(errorText){}, "PluginName", "method", []) ;
于 2013-11-12T16:08:46.120 回答
0

Cordova exec()!

我想知道您的 cordova.js 文件是否没有 navigator.splashscreen 对象。在 Cordova 3.0 中,所有的插件都被分离出来了,cordova.js 文件就成了桥代码。当应用程序运行时,它会通过 ajax 加载所有插件 .js 文件 - 请参阅已cordova_plugins.js构建项目中的文件。在加载这些文件时,Cordova 将为您修复命名空间,以便 navigator.splashscreen 命名空间实际上映射到启动画面 js 代码。我打赌你没有加载这个 cordova_plugins.js 文件,这意味着破坏不起作用。

它仍然有效,因为桥接代码有效。当您使用 exec() 时,您只是在运行 navigator.splashscreen.hide 执行的命令:https ://github.com/apache/cordova-plugin-splashscreen/blob/master/www/splashscreen.js#L26

如果我是你,我会尝试使用cordova cli以新的 Cordova 3.x 方式重建应用程序。这样你就不必手动调用 exec 函数,这看起来很脆弱(exec()可能不会改变,但查找你需要的每个插件交互的 exec 调用似乎很痛苦。)

顺便说一句,我不是 irc 上的塞尔吉奥,所以如果他发帖,请随时给他答案,因为他首先回答了你的问题。我只是想解释为什么会发生这种情况以及为什么它不再适合你——基本上,2.7 和 3.x 在插件方面有很大不同。

于 2013-11-12T15:25:15.750 回答