Phonegap - 本地存储不起作用 - 安卓

5
我正在使用本地存储来在页面之间传递值,以创建滚动效果(用户点击链接后根据ID被滚动到页面的特定部分)。
我之前使用的是cookie,但在Android上似乎不起作用,我读到本地存储得到支持,所以切换到了它。在浏览器中完全正常,但一旦打包成原生应用程序,我就失去了所有功能?API说明应该支持它,有什么想法吗?
这是我的代码:
基本URL:
var storage = window.localStorage;
$("a.scroll_link").click(function(event) {
    event.preventDefault();
    var value = $(this).attr("id");

        storage.setItem("key",value);

    console.log(value);

    window.location=$(this).attr("href");
});

接收URL:

$(function () { 

var value = window.localStorage.getItem("key");

if (value != "" && value != "undefined" && value != null) {
    var storage = window.localStorage;
    storage.setItem("key",value);
    var scroll_type = "";

    if ($.browser.webkit) {
        scroll_type = "body";
    } else {
        scroll_type = "html";
    }

    $(scroll_type)
        .stop()
        .animate({
        //get top-position of target-element and set it as scroll target
        scrollTop: ($("#" + value).offset().top - 25)
        //scrolldelay: 1.5 seconds
    }, {
        duration: 1500,
        complete: function () {
            storage.removeItem("key");
        },
    });
  }
});

这段代码在浏览器中运行良好,但本地运行时却出现了问题,有什么想法吗?

谢谢。

3个回答

2

现在搞定了,谢谢。我从设备中删除了应用程序,然后重新运行代码,现在一切都正常了。不过,我现在在使用localStorage与iScroll时遇到了问题,似乎我只能有一个而不能同时有两个.. 有任何想法吗? - woolm110

1

1. 很高兴知道你解决了第一个问题。正如gmh04所说,我认为你应该用“deviceready”替换你的初始化事件,这个事件在应用程序启动时触发。

2. 你的意思是window.localStorage.getItem("key")在接收URL时返回null吗?我没有遇到像你描述的问题。但是,你可以尝试将你的代码移动到与基本URL相同的页面上。我已经尝试了多次,并且非常确定localStorage会在同一页面中工作。


getItem似乎可以正常工作,传递的值也没问题,但它似乎无法动画并滚动到与该值ID匹配的页面位置。 - woolm110

1
我想补充一点,在cordova.js 2.6.0版本中存在一个bug,导致localStorage在Android上无法正常工作。

https://issues.apache.org/jira/browse/CB-3063

在2.5.0版本上它运行得非常完美,并且已经在2.7.0 rc上修复了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接