navigator.app.exitApp();导致“TypeError:无法调用方法'exitApp'未定义”

时间:2013-06-11 10:40:37

标签: javascript cordova cordova-2.0.0

Cordova 2.0.0

以下API调用无法按预期在Chrome浏览器上运行;

navigator.app.exitApp();

我正在

  

TypeError:无法调用未定义的方法'exitApp'

我的代码只包含cordova-2.2.0.js文件。没有针对PhoneGap采取进一步行动。

在移动设备上,此API调用可以正常工作

所以我猜我还有一个额外的步骤来抽象这种API函数???也许是某种“需要”的电话?

编辑#1:
我认为这还不够清楚:我希望科尔多瓦能够抽象这种API,这样即使不是真的可用(即不是在真实设备下而是在Chrome下),这些调用会什么都不做(特别是exitApp)。

此外 - 我可以在Chrome检查中看到navigator对象,其类型为CordovaNavigator

3 个答案:

答案 0 :(得分:4)

好吧,你正试图在chrome上使用cordova原生调用,当然不会运行,使用cordova原生调用来访问原生移动功能,Chrome不会模仿。

另外,我建议您始终使用最新的稳定版本,cordova已经在2.8版本上

你可以使用chrome插件涟漪模拟器测试其上的cordova应用程序,但它仍然支持一些cordova功能:http://emulate.phonegap.com

答案 1 :(得分:1)

这个答案依赖于纹波仿真器,尽管你可能想要一个更通用的解决方案。

两件事。首先,涟漪是新的和改进的,但它仍然有这个错误。您可以看到这篇文章:http://www.raymondcamden.com/index.cfm/2013/11/5/Ripple-is-Reborn并按照链接从github获取新的涟漪:https://git-wip-us.apache.org/repos/asf?p=incubator-ripple.git;a=blob_plain;f=README.md;hb=HEAD

其次,您可以修复纹波以防止出现特殊错误,即使使用cordova 3.0进行了大幅改善,纹路仍然存在。这是我在所有安装过程后所做的事情: 1)找到ripple.js文件;对我来说,它位于C:\ Documents and Settings \ myusername \ Application Data \ npm \ node_modules \ ripple-emulator \ pkg \ hosted \ ripple.js

2)找到这一行" ripple.define(' platform / cordova / 2.0.0 / bridge / app',功能(涟漪,出口,模块){"这是在我的下载#32611行。

3)在该行之后的注释之后,使用现有的show()函数添加exitApp()函数。我用了这段代码:

module.exports = {
    show: function (success) {
        return success && success();
    },
    exitApp: function(){
        if(console && console.log) {
            console.log("Tried to exit app from within ripple.");
        }
    }
};

我在应用程序试图退出的控制台中收到反馈。你可以做一些对你有用的事情。我认为新的涟漪值得安装它的工作。从那里,您可以自己修复它,甚至可以提供有用的解决方案。

UPDATE:exitApp和overrideBackbutton都被添加到ripple中(如上所述在代码中的相同位置)。请看这个链接:Add App.exitApp and App.overrideBackbutton methods support

答案 2 :(得分:0)

  <script type="text/javascript" src="js/jquery-1.10.2.js"></script>
            <script src="js/jquery.mobile-1.4.2.js"></script>
            <script src="js/cordova.js"></script>
            <script>
                document.addEventListener("deviceready", onDeviceReady, false);

                function onDeviceReady() {
                    document.addEventListener("backbutton", onBackClickEvent, false);
                }

                function onBackClickEvent() {
                    if (navigator.app) {
                        navigator.app.exitApp();
                    } else if (navigator.device) {
                        navigator.device.exitApp();
                    }
                }

            </script>