< = IE7中命名窗口的window.name存储

时间:2012-09-25 18:41:00

标签: javascript

我的应用程序使用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>

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

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

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

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

2 个答案:

答案 0 :(得分:1)

通常情况下,将此问题暂时搁置几天,然后重新回到原点,就会发现答案。

我使用this script(来自this Sitepoint article)为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之前手动保存。从本质上讲,为了获得最大的兼容性,您必须同时执行以下操作:save in onunload;每当设置新数据时手动保存。

答案 1 :(得分:-2)

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

访问它