与该页面内的 iframe 共享页面的全局 javascript 变量

IT技术 javascript iframe
2021-03-02 13:28:24

我有一个场景,其中有一个页面,其中包含<script>标签和一些全局 javascript 变量。我在该页面中还有一个 iframe,我想在 iframe 中访问页面的全局 javascript 变量。

有可能吗?,如果是,我该怎么做?

3个回答

通过在 iframe 的脚本中调用 parent.your_var_name 很容易。

一个条件:两个页面(主页面和 iframe 的)必须在同一个域中。

主页:

<script>
 var my_var = 'hello world!';
</script>

内嵌框架

<script>
  function some_fn(){
    alert(parent.my_var); //helo world!
  }
</script>
从父级调用函数时要小心,当它们引用窗口或文档时,它们使用父窗口或文档,而不是来自 iframe 的。
2021-04-18 13:28:24
谢谢,刚刚意识到我对 javascript 的使用有多糟糕:p
2021-04-20 13:28:24

如果iframe 和主文档不在同一个域中(由于跨域安全策略),则不可能。

要绕过此限制,您可以使用跨域消息传递。

如果iframe 主文档在同一个域中,则可以访问它们的全局变量。有属于 iframe 或主页的 window 对象的对象。

这是同一域中的主文档(或 iframe) 访问 iframe 变量myvar的代码

document.getElementById('iframeid').contentWindow['myvar'];
谢谢你的时间!顺便说一下,我想访问 iframe 上的页面变量,你告诉我相反的情况。
2021-04-21 13:28:24
看到相反的情况仍然非常有用。
2021-04-28 13:28:24
@Z.Khullah 我认为他的意思是Window.postMessage().
2021-05-01 13:28:24
您能否在这种情况下澄清“跨域消息传递”?
2021-05-06 13:28:24

上面的答案很好。补充一点,在 ES6 中要注意这一点:

 <script>
 const my_var2 = 'hello world!';
 let   my_var3 = 'hello world!';
 </script>

如果在主页中使用上述内容,则不能在 iframe 中引用 my_var2 或 my_var3。您必须使用“var”来完成此操作。

这是因为“const、let 和 class 不会在全局对象上创建属性”。

参见:在 javascript es6 中编写全局常量的正确做法是什么?