在不同的窗口中使用localStorage的检查(Using localstorage checks

2019-11-03 07:08发布

我试图做一个基本的web应用。 它基本上是当你发现某链接或URL时出现随着时间的推移,一个谜。

让人不解的有8件,而当你访问某个哈希出现。 散列使​​用Backbone.js的设置,并且它们每一个触发函数,显示与它对应的片。

哈希值是这样的 - “的index.html#隐藏/一”,“index.html的#隐藏/两”达人“的index.html#隐藏/八”。

每一个哈希被触发时,它显示了一个使用JavaScript函数,只是增加了一个类的元素一块。 够方便吧?

问题是,哈希值开在不同的窗口。 主窗口是只“的index.html#隐藏”。 所以,我需要为每一块localStorage的价值,不断地检查它的主页上,如果它被设置为“是”,执行的功能。

这可能吗? 如果是这样,我怎么会去这样做呢?

提前致谢,

-Mitchyl

编辑 - 这里的源代码,如果任何人的兴趣。 我不太清楚什么是相关的,什么不是,所以这里的,在它的全部代码。 http://pastebin.com/Q4hpJtQ8

Answer 1:

而不是从主窗口中查询本地存储,它可能会更好使用某种窗口之间的直接通信。

如果所有的窗户都是一样的原点(相同的协议,域和端口)和一个窗口打开了别人,那么你可以直接从一个窗口到另一个,只要你保存的窗口句柄调用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所有值的对象一个关键。



文章来源: Using localstorage checks in a different window