我有一个应用程序,顶部框架和顶部框架内有两个框架集。导航到其他页面时,顶部框架保持不变,只有框架集发生变化。我使用localStorage存储一些数据(也存储在服务器上,但如果它在客户端我们每次都不进行往返),IE7上没有这个功能,所以我们决定尝试模拟localStorage IE7。
我们的想法是在顶部框架上存储变量localStorage(仅当localStorage不可用时)。每当localStorage在顶部框架上不可用时,我们就会创建一个带有_data,getItem(),setItem(),removeItem()的虚拟localStorage对象。这个对象的生命周期与顶部框架的寿命一样长,这将为我们节省大量的往返服务器,因此在IE7中提供了很好的性能提升。
我遇到的问题是,每当我更改框架(不是顶部框架)并从顶部框架获取localStorage并尝试使用window.top.localStorage.getItem('... “);我收到错误消息无法从释放的脚本执行代码。
为什么我得到这个?
答案 0 :(得分:4)
我建议您查看jStorage,它提供localStorage
或旧globalStorage
或userData行为的通用界面。可能你可以直接使用jStorage(参见here)并节省你编写相应代码的时间,或者你可以对自己的实现使用相同的想法。有关旧的userData行为的更多信息,例如here。
答案 1 :(得分:3)
也许我会重复Brilliand已经分享的内容,但由于我完全不理解他的回答,我也会分享一些想法/建议:
top.localStorage
本身的任何引用(但同样,它不应该导致任何问题)。< / LI>
答案 2 :(得分:2)
请参阅What causes the error "Can't execute code from a freed script"
当访问由子框架(已经关闭)创建的代码时,会出现该错误消息。这至少意味着,在关闭它们的窗口之后,你无法保持JavaScript函数;我不确定是否也适用于数据对象,但它可能。如果是这样,那么在顶部窗口中简单存储JavaScript对象将不起作用。
应该可以通过确保在存储数据之前从子窗口中完全分离数据来解决此问题。这可以通过使用存储功能(必须由父窗口单独创建)来完成,JSON对该数据进行编码,并存储编码的字符串。检索将不那么挑剔,因为检索到的对象不需要保持比检索它的子窗口更长的时间。