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

时间:2013-11-12 13:04:54

标签: android 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交互。问题似乎是插件。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

Cordova exec()!

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

它仍在工作,因为桥接代码有效。当您使用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在插件方面是非常不同的。