5

我正在使用本地存储在页面之间传递值以创建滚动效果(用户单击链接并根据 ID 滚动到页面的特定部分)

我以前使用 cookie,但似乎在 Android 上不起作用,我读到支持本地存储,所以切换到那个。它在浏览器中工作得很好,但是一旦它被打包为本机应用程序,我就失去了所有功能?API声明应该支持它,有什么想法吗?

这是我的代码:

基本网址:

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");
});

接收网址:

$(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");
        },
    });
  }
});

该代码在浏览器中运行良好,只是不是本机,有什么想法吗?

谢谢,

4

3 回答 3

2

使用 document.addEventListener("deviceready", onDeviceReady, false) 而不是 $(function(){...}

http://docs.phonegap.com/en/2.5.0/cordova_events_events.md.html#deviceready

于 2013-03-01T13:30:33.553 回答
1

我想补充一点,cordova.js 的 2.6.0 版本存在一个错误,导致 localStorage 无法在 Android 上运行:

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

在 2.5.0 版本上它可以完美运行,并且已经在 2.7.0 rc 上修复。

于 2013-04-27T09:07:17.323 回答
1

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

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

于 2013-03-02T00:58:45.777 回答