【问题标题】:navigator.app.exitApp(); results in "TypeError: Cannot call method 'exitApp' of undefined"navigator.app.exitApp();导致“TypeError:无法调用未定义的方法‘exitApp’”
【发布时间】:2013-06-11 10:40:36
【问题描述】:

科尔多瓦 2.0.0

正如预期的那样,以下 API 调用在 Chrome 浏览器上不起作用;

navigator.app.exitApp();

我明白了

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

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

在移动设备上,此 API 调用确实有效

所以我猜我应该采取额外的步骤来抽象这种 API 函数???也许是某种“要求”调用?

编辑 #1:
我认为这还不够清楚:我希望 Cordova 能够抽象这种 API,以便即使不是真正可用(即不是在真实设备下而是在 Chrome 下),这些调用也会什么都不做(尤其是exitApp)。

另外 - 我可以在 Chrome 检查中看到 navigator 对象,它的类型是 CordovaNavigator

【问题讨论】:

    标签: javascript cordova cordova-2.0.0


    【解决方案1】:

    好吧,您正在尝试在 chrome 上使用 cordova 本机调用,这当然不会运行,cordova 本机调用是为了访问本机移动功能,而 Chrome 不能模拟。

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

    您可以获取 chrome 插件波纹模拟器在其上测试 cordova 应用程序,但它仍然不支持一些 cordova 功能:http://emulate.phonegap.com

    【讨论】:

    • Ripple Emulator 不能正常工作(可能是版本问题)。另外,是的,如果不可用(即在 Chrome 中),我希望这些调用被抽象
    • 是的,这也是我想要的一个功能,使用cordova资源在chrome中开发会更快,是的,ripple仅支持cordova 1.0和2.0,而且效果不好,我知道你的感觉:d
    • 哈,我明白了.. 谢谢 :) 让我们等一下,看看其他人是否有什么想法..
    【解决方案2】:

    尽管您可能想要更通用的解决方案,但此答案依赖于纹波模拟器。

    两件事。首先,纹波是新的和改进的,但它仍然有这个错误。你可以看到这篇文章: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) 在我的下载中找到第 32611 行的“ripple.define('platform/cordova/2.0.0/bridge/app', function (ripple, exports, module) {”这一行。

    3) 在该行后面的 cmets 之后,添加带有现有 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.");
            }
        }
    };
    

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

    更新:exitApp 和 overrideBackbutton 都已添加到涟漪中(在上面提到的代码中的相同位置)。见此链接:Add App.exitApp and App.overrideBackbutton methods support

    【讨论】:

      【解决方案3】:
        <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>
      

      【讨论】:

        猜你喜欢
        • 2015-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-14
        相关资源
        最近更新 更多