我试图做一个基本的web应用。 它基本上是当你发现某链接或URL时出现随着时间的推移,一个谜。
让人不解的有8件,而当你访问某个哈希出现。 散列使用Backbone.js的设置,并且它们每一个触发函数,显示与它对应的片。
哈希值是这样的 - “的index.html#隐藏/一”,“index.html的#隐藏/两”达人“的index.html#隐藏/八”。
每一个哈希被触发时,它显示了一个使用JavaScript函数,只是增加了一个类的元素一块。 够方便吧?
问题是,哈希值开在不同的窗口。 主窗口是只“的index.html#隐藏”。 所以,我需要为每一块localStorage的价值,不断地检查它的主页上,如果它被设置为“是”,执行的功能。
这可能吗? 如果是这样,我怎么会去这样做呢?
提前致谢,
-Mitchyl
编辑 - 这里的源代码,如果任何人的兴趣。 我不太清楚什么是相关的,什么不是,所以这里的,在它的全部代码。 http://pastebin.com/Q4hpJtQ8
而不是从主窗口中查询本地存储,它可能会更好使用某种窗口之间的直接通信。
如果所有的窗户都是一样的原点(相同的协议,域和端口)和一个窗口打开了别人,那么你可以直接从一个窗口到另一个,只要你保存的窗口句柄调用JS功能。 对于你的主窗口打开的窗口,主窗口会在window.opener
所以你也可以调用全局定义的函数在主窗口中,如:
window.opener.updatePuzzle(data);
您还可以使用window.postMessage()
在窗口之间交换数据,这似乎(表面上)有点清洁,而不是限制性大约相同的来源(因为它需要两个协作的窗口),但也有局限性postMessage()
在IE浏览器IE11之前仍使其依靠(感谢IE)困难。
如果你的主窗口没有以任何方式打开其他窗口(例如,用户只需键入其他的URL),那么你的窗户不能直接在浏览器内相互通信。 在这种情况下,他们就会要么通过服务器或轮询通过localStorage的数据交换数据。
这里有localStorage的一个很好的教程: http://www.sitepoint.com/an-overview-of-the-web-storage-api/ :
从一个窗口:
localStorage.setItem("hash4", true);
从另一个窗口:
setInterval(function() {
var maxHash = 5;
for (var i = 0; i < maxHash; i++) {
var val = localStorage.getItem("hash" + i)
if (val) {
// hash value i was found to be true
}
}
}, 1000);
因为它听起来像你这样的移动,你应该知道,投票持续是无法在手机上的一堆理由理想。 首先,它是当它允许运行的电池消耗。 第二关,移动设备可能不会让它连续运行(因为它试图以节省您的电池)。
你也可以多一点复杂的你如何存储和,而不是使用N个独立按键,你可以存储JSON在代表包含在一个关键的localStorage所有值的对象一个关键。