关闭后Phonegap应用程序不会重新打开(无法加载错误的网页:CDVWebViewDelegate:当状态= 1时启动导航)

时间:2013-09-03 09:48:52

标签: ios xcode cordova cordova-3

我正在使用Phonegap为iOS构建应用程序,但我遇到了一些问题。该应用程序在模拟器和真实设备上运行良好,直到我使用多任务关闭关闭应用程序(双击主页按钮序列..)

重新打开应用后,我发现它变得无法响应,您无法以任何方式与其进行互动。我花了相当多的时间试图调试这个并且我没有快乐。

错误明智我在xcode控制台中出现错误Failed to load webpage with error: CDVWebViewDelegate: Navigation started when state=1。经过大量的谷歌搜索后,似乎这是由于URL中的哈希标签引起的(我正在使用它向下滚动到相同和不同页面上的链接)。大多数建议建议将phonegap / cordova更新到最新版本。我以前是2.8,我上升到2.9,它仍然没有工作,我现在3岁,我仍然遇到同样的问题。

我已经检查了cordova git并使用假定的修复程序多次更新了我的CDVWebViewDelegate.m文件,似乎没有任何效果。我有一个以前版本的应用程序在早期版本的Cordova / Phonegap上工作,但我最近升级了,我宁愿不降级以使其工作..

我应该注意到我正在使用zepto进行我的ajax调用而不是JQM,因为哈希标签滚动我正在使用以下代码(想想这可能有帮助,因为它似乎是一个哈希问题..)< / p>

哈希更改功能

// Ajax
var wrap = $('#contentScroller .scroller')

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

// load page

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

    if (page != "" && window.location.hash) {
        wrap.hide();
        spinner.spin(target);
        //setTimeout(function () {
            wrap.load('pages/' + page + ".html .page-wrapper")
            contentScroller.scrollTo(0,0);
            refreshScroll();
        //}, 1500);

        snapper.close();
        $(menuBtn).removeClass('active');
    }else{
        wrap.hide();
        spinner.spin(target);
        //setTimeout(function () {
            wrap.load('pages/Welcome.html .page-wrapper')
            refreshScroll();
        //}, 1500);

        snapper.close();
        $(menuBtn).removeClass('active');
    }
}

// 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)
}

滚动

$(document)
    .on('ajaxStart', function () {
        wrap.hide();
    })
    .on('ajaxStop', function () {
        //wrap.show();
    })
    .on('ajaxSuccess', function () {
        //setTimeout(function () {
            spinner.stop();
        wrap.fadeIn(700);
        refreshScroll();
    //}, 1000);


    // Local storage scrollTo
    var storage = window.localStorage;
    var url = window.location.href.substr(window.location.href.lastIndexOf("/") + 1);

    $('a.scroll-link').click(function (event) {
        event.preventDefault();
        url = url.replace('home.html?firstrun#', "");
        url = url.replace(url, url+".html");

        var myHref = $(this).attr('href');

        if (url == myHref) {
            var sameScroll = $(this).attr('data-scroll-same-page');
                sameScroll = sameScroll.replace(sameScroll, "a#" + sameScroll);

                contentScroller.scrollToElement(sameScroll, 1500);

        } else {

            var diffScroll = $(this).attr("data-scroll-diff-page");

            storage.setItem("key", diffScroll);

             //Alter value for iScroll
            var value = window.localStorage.getItem("key");
            value = value.replace(value, "a#" + value);

            location.hash = $(this).attr('href').match(/(^.*)\./)[1]
            $(window).on('hashchange', hashChange).trigger('hashchange')

            // Scroll to element after .5 second
            setTimeout(function () {
                contentScroller.scrollToElement(value, 1500);
                return false;

            }, 2000)

            // Clear local storage to prevent scrolling on page reload
            localStorage.clear();

        }

示例链接

<a href="IndexOfTerms.html" class="ajax scroll-link" data-scroll-diff-page="First_year_allowance">

然后将attr“first_year_allowance”传递给IndexOfTerms页面,然后向下滚动到具有该id的元素

有人可以解释一下我怎么能解决这个问题?它真的开始惹恼我了,所以我非常希望得到一个非常尖锐的解决方案!

注意:使用的库:iScroll,Zepto,fastclick,snapjs,spinjs

谢谢!

0 个答案:

没有答案