2

我有一个应用程序window.name用作sessionStorage.

示例(为简洁起见):

function setData(data){
  window.name = JSON.stringify(data);
}
function getData(data){
  return JSON.parse(window.name);
}

这一切在几乎所有浏览器中都能正常工作。但是,我最近发现当窗口与目标一起启动时,这在 IE7 及以下版本中不起作用。

<a href="winning.html" target="bob">winning.html</a>

如果我winning.html从上面启动文件A,使用 IE7,getData将始终返回“bob”,无论我们尝试通过什么设置setData

如果我像这样修改启动链接(删除目标),它将正确设置和记住数据。

<a href="winning.html">winning.html</a>

问题是我并不总是能够控制那个原始链接。有没有办法解决?

4

2 回答 2

1

通常情况下,将这个问题搁置几天,然后重新回到它已经揭示了答案。

我使用此脚本(来自此 Sitepoint 文章)为 window.name 会话存储测试了该错误。

正如您可能猜到的那样,这个脚本不受我原来帖子中的错误的影响。为什么?是什么让这个工作有效,而我上面的简单示例不起作用?这一点是关键:

// page unload event
if (window.addEventListener) window.addEventListener("unload", Save, false);
else if (window.attachEvent) window.attachEvent("onunload", Save);
else window.onunload = Save;

出于某种原因,您必须将数据保存回window.name窗口unload事件中的容器中。

请注意仅使用 onunload 方法,因为移动 safari 不会记住数据。要让移动 Safari 将数据持久保存在 中window.name,您必须在 onunload 之前手动保存。本质上,为了获得最大的兼容性,您必须同时执行以下操作:在 onunload 中保存;每当设置新数据时手动保存。

于 2012-09-27T16:16:36.233 回答
-2

window.name可能包含在您使用时设置的窗口名称target="bob",实际上是窗口或框架的名称...所以只需使用另一个全局变量,例如window._session...如果您有框架,使用它会很好window.top._session。仅供参考:所有全局 JS 变量都存储在窗口中,所以如果你像这样定义一个全局变量:var name = "hello"......你也可以访问它window.name

于 2012-09-25T19:32:30.010 回答