跨帧共享全局javascript对象
这听起来可能很可笑,但在某些情况下,我们需要跨跨帧共享全局javascript对象,javascript,html,iframe,Javascript,Html,Iframe,这听起来可能很可笑,但在某些情况下,我们需要跨iframe共享JavaScript对象 当我们试图使用localStorage来实现这一目的时,人们说一些浏览器可能不支持它。即使他们支持localStorage,用户也可能减少了存储容量等等… 因此,我的问题是,我们是否有一个解决方案/替代方案来跨iframe共享JavaScript对象 下面的例子可能会让我们有相同的想法 parentpage.html <html> ... <head><script src="s
iframe
共享JavaScript对象
当我们试图使用localStorage
来实现这一目的时,人们说一些浏览器可能不支持它。即使他们支持localStorage,用户也可能减少了存储容量等等…
因此,我的问题是,我们是否有一个解决方案/替代方案来跨iframe
共享JavaScript
对象
下面的例子可能会让我们有相同的想法
parentpage.html
<html>
...
<head><script src="script1.js" type="text/Javascript"></script></head>
<body>
...
<iframe src="childpage.html"></iframe>
</body>
</html>
<html>
...
<head><script src="script2.js" type="text/Javascript"></script></head>
...
</html>
...
...
childpage.html
<html>
...
<head><script src="script1.js" type="text/Javascript"></script></head>
<body>
...
<iframe src="childpage.html"></iframe>
</body>
</html>
<html>
...
<head><script src="script2.js" type="text/Javascript"></script></head>
...
</html>
...
...
注意:
parentpage.html、childpage.html、script1.js、script2.js位于同一个域和同一个位置
假设script1.js使用了一个需要公开的JavaScript对象
由于浏览器/用户代理为页面中使用的每个额外的iframe
创建一个单独的Window对象
,并且如果我们将公共JavaScript对象
附加/扩展到Window对象/文档对象
,我们就无法访问该对象,因此它的最后希望似乎消失了
是否有任何解决方案/解决方法?跨属于多个域的多个iFrame共享数据可以通过postMessage来完成。正如@Pointy所建议的,跨框架共享数据的LocalStoage
的最佳替代方法是使用window.top
属性/成员/对象
但是,正如mozilla开发文档中提到的那样,该属性仍然是只读的,但我仍然怀疑它是否在将来被严格强制不向窗口添加新成员/字段。top
请参阅:将对象放在最上面的页面上。然后,子帧可以引用top.globalObject
来访问它。谢谢!这可能有用。由于子页面iframe
位于主页内,因此使用top
作为我们的通信接口听起来是合理的。但我还没试过呢!我将尝试它,以确保它工作良好,它应该工作良好,只要你所有的网页真的是来自同一个域。我曾在一个大型项目中工作过,该项目广泛地利用了框架间的协调;它在很久以前的浏览器中运行得很好。@Pointy它运行得很好!非常感谢。因此,正如您所说,来自domain1的页面的window.top
Property/Member/Object对于来自domain2的页面是不可访问的。我需要检查一下!正如您从标记和注释中看到的,它都在同一个域上,因此不需要这样做。