2

我正在为客户编写一个 Android 应用程序。我一直在使用自己的框架来创建应用程序。

这个框架在 iPhone 上运行没有问题,但是当我将它应用到 Android/Phonegap 时,我遇到了后退按钮的问题。我的解决方案是调用 History 对象以在查看不同页面时创建项目。这段代码的要点如下:

        'hook_call': function (name, data, callback, skip_history) {

            if (typeof callback != 'function') {
                callback = function () {};
            }

            app.handlers[name].call(this, data, callback);
            window.app.current_hook = name;

            // Manage history
            if(!skip_history ) {
                history.pushState({'page': name, 'data': data}, null, '#'+name);
            }

        }

我的 onpopstate 函数:

// Manage history
window.onpopstate = function(event) {
    try {
        if(window.app.current_hook != event.state.page)
            window.app.hook_call(event.state.page, event.state.data);
    }
    catch(e) {}
};

因此,这会正确添加项目。但是,如果我在历史记录中说三个级别 ( home, listings-> view_listing) 并从中按回,view_listing我将被带到该listings部分,这是正确的,但是任何进一步的按都会使我处于listings,它不会再向后移动。

当我在刚刚解释的导航步骤之后查看日志时,我看到了这些虚假项目:

04-16 10:22:39.320: D/CordovaWebView(1148): The current URL is: file:///android_asset/www/index.html#listing
04-16 10:22:39.320: D/CordovaWebView(1148): The URL at item 0 is:file:///android_asset/www/index.html
04-16 10:22:39.400: D/CordovaWebView(1148): The URL at index: 0is file:///android_asset/www/index.html
04-16 10:22:39.400: D/CordovaWebView(1148): The URL at index: 1is file:///android_asset/www/index.html#welcome
04-16 10:22:39.400: D/CordovaWebView(1148): The URL at index: 2is file:///android_asset/www/index.html#listings
04-16 10:22:39.410: D/CordovaWebView(1148): The URL at index: 3is file:///android_asset/www/index.html#listing

我应该添加它以访问不同的页面,hook_call()例如在点击列表或按下按钮时调用。

这种情况适用于通过应用程序进行导航的任何其他组合。

有没有人有这方面或类似的经验?

4

1 回答 1

4

我相信你的函数应该是这样的,设置了 skip_history 标志:

// Manage history
window.onpopstate = function(event) {
    try {
        if(window.app.current_hook != event.state.page)
            window.app.hook_call(event.state.page, event.state.data, null, true);
    }
    catch(e) {}
};

由于您不想推送刚刚弹出的历史记录到堆栈中。

于 2013-04-19T14:53:14.007 回答