Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨帧共享全局javascript对象_Javascript_Html_Iframe - Fatal编程技术网

跨帧共享全局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的页面是不可访问的。我需要检查一下!正如您从标记和注释中看到的,它都在同一个域上,因此不需要这样做。