Hashchange, вызывающий сбой приложения phonegap?

Я использую Ajax в приложении PhoneGap для загрузки контента для разных страниц. Я также использую onhashchange для включения функциональности кнопки "назад".

Сначала все работает нормально, но если я щелкаю 3 разные ссылки (и запускаю 3 изменения хеша), то мое приложение полностью падает, перестает отвечать на запросы, а затем израсходует всю мою память.

Код изменения хэша приведен ниже, у кого-нибудь есть идеи, почему он может зависать / просачиваться из памяти?

$('a.ajax').click(function () {
    location.hash = $(this).attr('href').match(/(^.*)\./)[1]
    return false
})

function hashChange() {
    var page = location.hash.slice(1)

    if (page != "" && window.location.hash) {
        wrap.load('pages/' + page + ".html .page-wrapper", function(){
            closeMenu();
        })
    }else{
        wrap.load('pages/Welcome.html .page-wrapper', function(){
            closeMenu();
        })
    }
}

// check for hash change
if ("onhashchange" in window) {
    $(window).on('hashchange', hashChange).trigger('hashchange')
} else { // lame browser
    var lastHash = ''
    setInterval(function () {
        if (lastHash != location.hash)
            hashChange()
        lastHash = location.hash
        //contentScroller.scrollTo(0,0);
    }, 100)
}

Просто чтобы заметить, я получаю следующую ошибку в консоли xCode, и я использую версию 2.9 phonegap

CDVWebViewDelegate: навигация началась, когда состояние =1

Спасибо!

1 ответ

Я не был полностью уверен, что вызвало сбой, но я решил использовать этот плагин http://benalman.com/projects/jquery-hashchange-plugin/ и теперь все работает нормально

var wrap = $('#contentScroller .scroller');

$('a.ajax').click(function () {
    location.hash = $(this).attr('href').match(/(^.*)\./)[1];
    return false;
});

$(window).hashchange(function () {
    var page = location.hash.slice(1);

    if (page !== "" && window.location.hash) {
        wrap.load('pages/' + page + ".html .page-wrapper", function () {
            closeMenu();
        });
    } else {
        wrap.load('pages/Welcome.html .page-wrapper', function () {
            closeMenu();
        });
    }
});
Другие вопросы по тегам