4

我在使用 Ripple Emulator 的 Cordova 2.8 Android 项目的初始页面加载时遇到 angular-mobile-nav 问题。我得到的错误是:

TypeError: Object #<Object> has no method 'overrideBackbutton'
    at module.exports.exec (chrome-extension://geelfhphabnejjhdalkjhgipohgpdnoc/ripple.js:40:22917)
    at backButtonChannel.onHasSubscribersChange (http://localhost:8076/cordova.js:1145:13)
    at Channel.subscribe (http://localhost:8076/cordova.js:667:49)
    at HTMLDocument.document.addEventListener (http://localhost:8076/cordova.js:132:34)
    at null.<anonymous> (http://localhost:8076/components/mobile-nav/mobile-nav.js:11:14)
    at Channel.fire (http://localhost:8076/cordova.js:709:23)
    at http://localhost:8076/cordova.js:232:47

基本上,这是由 mobile-nav.js 第 11 行引起的:
document.addEventListener("backbutton", function() {

源自第 1145 行的 cordova.js 调用引发的错误:
exec(null, null, "App", "overrideBackbutton", [this.numHandlers == 1]);

这是一个可以复制的问题吗?任何帮助将不胜感激。

4

2 回答 2

5

我在使用 Ripple 和 Phonegap 2.5.0 时第一次遇到这种情况。正如您所指出的,在适用于 Android 的 cordova-2.8.0.js 的第 1145 行,它假定在 Android 平台上运行,因此调用 Ripple 没有存根的本机函数 App.overrideBackbutton()。

因为它只在附加/分离第一个处理程序时调用它,所以我通过欺骗 Ripple 认为已经有多个处理程序来解决这个问题:

<html>
    <head>
        <script type="text/javascript" charset="utf-8" src="cordova-2.8.0.js"></script>
        <script type="text/javascript" charset="utf-8" src="jquery-1.7.1.min.js"></script>

        <script type="text/javascript">
        _IS_RIPPLE_EMULATOR = $('#tinyhippos-injected').length > 0;

        function deviceready() {
            // Make ripple think that a back button handler has already been attached
            if(_IS_RIPPLE_EMULATOR) cordova.addDocumentEventHandler('backbutton'); 

            document.addEventListener("backbutton", function(){
                alert("Pressed back");
            });

        }
        document.addEventListener("deviceready", deviceready, true);        
        </script>
    </head>
    <body></body>
</html>
于 2013-06-22T13:47:03.667 回答
1

从 Ripple 0.9.22 开始,这应该不再是问题,因为添加了App.exitAppApp.overrideBackbutton方法:

https://git-wip-us.apache.org/repos/asf?p=incubator-ripple.git;a=log;h=refs/tags/0.9.22

因此,如果可能,请更新您的 Ripple 版本,或采用 Dpa99c 提到的解决方法。

于 2014-04-26T19:10:02.373 回答