我的应用程序使用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>
问题是我并不总是控制那个原始链接。有没有办法解决这个问题?
答案 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"