我正在使用本地存储在页面之间传递值以创建滚动效果(用户单击链接并根据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");
},
});
}
});
代码在浏览器中工作正常,不是本机,任何想法?
谢谢,
答案 0 :(得分:2)
使用document.addEventListener(“deviceready”,onDeviceReady,false)代替$(function(){...}
http://docs.phonegap.com/en/2.5.0/cordova_events_events.md.html#deviceready
答案 1 :(得分:1)
1.很高兴知道你解决了第一个问题。正如gmh04所说,我认为你应该用'deviceready'替换你的init事件,这是在应用程序开始运行时触发的。
2。 你的意思是window.localStorage.getItem(“key”)在接收URL中返回null? 我没有像你描述的那样完全遇到问题。但是,您可以尝试将接收URL中的代码移动到基本URL的同一页面。我曾经多次尝试并且非常确定localStorage可以在同一页面中工作。
答案 2 :(得分:1)
我想补充一点,2.6版本的cordova.js上存在一个错误,导致localStorage无法在Android上运行:
https://issues.apache.org/jira/browse/CB-3063
在2.5.0版本上它完美运行,并且已经修复了2.7.0 rc。