在页面和 iframe 之间共享全局 JavaScript 变量

当一个网页包含一个内嵌的 iframe 元素时,在页面和 iframe 中共享数据可能会成为一个重要问题。特别是在前端开发中,我们经常需要脚本代码在主页面和 iframe 中共享相同的数据。

下面是几种方法可以实现在页面和 iframe 之间共享全局 JavaScript 变量:

1. 使用 window.parent

如果 iframe 嵌入到页面中,则可以使用 window.parent 引用其父级窗口。通过将变量附加到 parent 对象上,您可以将其作为父窗口的全局变量使用,并从 iframe 脚本中访问它们。

下面是一个简单的示例,展示了如何在父级窗口和 iframe 中设置和访问共享变量:

-- ------------
----------------- - -
  -------- ------ -------
--

-- - ------ -------
---------------------------------------------- -- -- ------ -------

在此示例中,我们将 sharedData 变量添加到 window 对象的父级窗口中。然后,我们可以使用 window.parent.sharedData 来在 iframe 中访问该变量。

2. 使用 window.postMessage()

另一种方法是使用 window.postMessage() API。该 API 可以安全地在两个不同的窗口之间传递消息。当然,这也包括在父窗口和 iframe 之间传递数据。

下面是一个示例,展示了如何使用 window.postMessage() 在页面和 iframe 中共享变量:

-- ------------
----------------- - -
  -------- ------ -------
--

-- ---- ------ ---
---------------------------------- --------------- -
  -- -------- ------------
  -- ------------- --- ----------------------- -
    -------
  -

  -- --------
  --- ---- - -----------------------

  -- ------- ------------------------- ------
  -- ---------- --- ---------------- -
    -----------------------------------------
      ----- -------------
      ------ -----------------
    --- -----
  -
---

-- - ------ -------
---------------------------------------------------
  ----- ---------------
--- -----

在此示例中,我们使用 window.postMessage() API 在 iframe 和主窗口之间通信。首先,我们在主窗口中设置了 sharedData 变量。然后,我们监听了来自 iframe 的消息,并通过 postMessage() 方法将共享变量返回到 iframe。

3. 使用 LocalStorage

LocalStorage 是 HTML5 提供的一种用于在浏览器中存储键值对的 API。可以使用 LocalStorage 来持久化地存储全局变量,并从不同的窗口访问它们。

下面是一个示例,展示了如何使用 LocalStorage 在页面和 iframe 中共享变量:

-- ------------
---------------------------------- ----------------
  -------- ------ -------
----

-- - ------ -------
--- ---------- - -----------------------------------------------
-------------------------------- -- -- ------ -------

在此示例中,我们使用 localStorage API 将共享变量保存到本地存储中。然后,我们可以在不同的窗口中使用 localStorage 来获取共享变量。

总结

在本文中,我们介绍了三种在页面和 iframe 之间共享全局 JavaScript 变量的方法:使用 window.parentwindow.postMessage() 和 LocalStorage。每种方法都有其各自的优缺点,具体取决于您的需求和应用场

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/27978