好吧,我的代码有点乱,因为我还是一个学习Javascript和HTML的学生,所以我会尽力解释。
我正在尝试在几个html页面上获得“继续”链接,以链接到数组中随机选择的页面。我希望从数组中取出该页面,然后将该数组保存在sessionStorage中,以便下一页的“继续”链接将从数组中随机选择一个不是当前页面或过去页面的链接。
这是我的代码:
var initialLinks=['music.html', 'test.html', 'recover.html', 'random.html']
function randomLink(){
if (typeof(Storage)!=="undefined")
{
if (sessionStorage.links)
{
var storedLinks = JSON.parse(sessionStorage.links);
var arraylink = storedLinks[Math.floor(Math.random()*storedLinks.length)];
window.location = arraylink;
var index = storedLinks.indexOf(arrayLink);
if (index > -1){
storedLinks.links.splice(index, 1);
}
sessionStorage.links = JSON.stringify(storedLinks);
}
else
{
sessionStorage.links = JSON.stringify(initialLinks);
var storedLinks = JSON.parse(sessionStorage.links);
var arraylink = storedLinks[Math.floor(Math.random() *storedLinks.length)];
window.location = arraylink;
var index = storedLinks.indexOf(arrayLink);
if (index > -1){
storedLinks.links.splice(index, 1);
}
sessionStorage.links = JSON.stringify(storedLinks);
}
}
else
{
document.write("Sorry, your browser does not support web storage.");
}
}
我正在获取链接到随机页面的“继续”链接,但页面似乎仍保留在数组中。任何帮助将不胜感激。另外,我为我的草率风格提前道歉:)
答案 0 :(得分:0)
我猜这个
window.location = arraylink;
加载新文档并阻止其他所有javascript发生。在sessionStorage的每个读写操作后面放置一个警报(sessionStorage.links)以确保。
答案 1 :(得分:0)
仔细观察,我也注意到了其他一些错误 - 在window.location = arraylink中使用小写L编写arrayLink,但在大写的其他地方。另外,storedLinks.links.splice(index,1);应该是storedLinks.splice(index,1); (没有.links)。并且,一旦您访问了所有页面,您将尝试加载“未定义”页面,因为您没有重新初始化阵列。
这对我有用(记得把它保存到你的所有文件名中):
<script>
var initialLinks=['music.html', 'test.html', 'recover.html', 'random.html']
function randomLink(){
if (typeof(Storage)!=="undefined")
{
if (sessionStorage.links)
{
alert("reading(1) "+sessionStorage.links);
var storedLinks = JSON.parse(sessionStorage.links);
if (storedLinks.length==0) {
storedLinks=initialLinks;
}
var arraylink = storedLinks[Math.floor(Math.random()*storedLinks.length)];
var index = storedLinks.indexOf(arraylink);
if (index > -1){
storedLinks.splice(index, 1);
}
sessionStorage.links = JSON.stringify(storedLinks);
alert("saved(1) "+sessionStorage.links);
window.location = arraylink;
}
else
{
sessionStorage.links = JSON.stringify(initialLinks);
alert("reading(1) "+sessionStorage.links);
var storedLinks = JSON.parse(sessionStorage.links);
var arraylink = storedLinks[Math.floor(Math.random() *storedLinks.length)];
var index = storedLinks.indexOf(arraylink);
if (index > -1){
storedLinks.splice(index, 1);
}
sessionStorage.links = JSON.stringify(storedLinks);
alert("saved(2) "+sessionStorage.links);
window.location = arraylink;
}
}
else
{
document.write("Sorry, your browser does not support web storage.");
}
}
</script>
<a href="javascript:randomLink()">Follow Link</a>
答案 2 :(得分:0)
sessionStorage数据才会持续。请改用localStorage。
此外,您需要在设置window.location之前拼接数组。如果你跳到一个块中间的另一个页面,你的脚本将无法完成执行。
我清理了你的代码,现在它对我有用。你在这里:
function randomLink() {
if (typeof window.localStorage !== 'undefined') {
// Create links initially if non-existent.
if (typeof localStorage.links === 'undefined') {
localStorage.links = JSON.stringify(initialLinks);
}
// Get links.
var storedLinks = JSON.parse(localStorage.links);
// Select random link.
if (storedLinks.length > 0) {
var randomIndex = Math.floor(Math.random()*storedLinks.length);
var arraylink = storedLinks[randomIndex];
// Remove the link from the array.
storedLinks.splice(randomIndex, 1);
// Update the saved link.
localStorage.links = JSON.stringify(storedLinks);
// Now go to the link.
window.location = arraylink;
}
else {
alert('All out of links!');
}
}
else {
document.write("Sorry, your browser does not support web storage.");
}
}
randomLink();