Phonegap 3 - 在托管应用程序中调用Cordova方法



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

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被正确调用,因此已经存在某种科尔多瓦交互。问题似乎是插件。

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

cordova.exec(function(response){}, function(errorText){}, "PluginName", "method", []) ;

Cordova exec()!

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

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

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

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

最新更新