在 iframe 中使用 window.parent.myFunction 是不是安全?

Posted

技术标签:

【中文标题】在 iframe 中使用 window.parent.myFunction 是不是安全?【英文标题】:Is it safe to use window.parent.myFunction in an iframe?在 iframe 中使用 window.parent.myFunction 是否安全? 【发布时间】:2012-10-09 06:08:47 【问题描述】:

<iframe>javascript 中,我需要在父窗口中调用一个函数。两个窗口都来自同一个域。

使用window.parent.myFunction();安全吗?

【问题讨论】:

我的两个担忧是 1. 不同版本的浏览器以不同的方式提供对该功能的访问。窗口.parent.myFun,窗口.parentWindow.myFunc。 2. 安全设置阻止它。 【参考方案1】:

简答

是的,您可以使用同一域中的window.parent

WhatWG specification chapter 6: Loading Web pages 说:

iframe.parent 存在 iframe.parentiframe 的父节点的 DOM 的代理 如果来源相同,则允许访问

真的很长很长的答案

我试图通过阅读规范向您展示如何得出这个结论,同时牢记:iframe 中访问parent 的特征是什么?

让我们开始吧。很长的一段文字。

1。 DOM 属性parent

WhatWG#dom-parent 说window.parent

浏览上下文中DocumentWindow 对象的父IDL 属性b 必须返回父浏览上下文WindowProxy 对象,如果有一个(即如果 b 是子浏览上下文),或浏览上下文 b 本身的WindowProxy 对象,否则(即如果它是顶部级浏览上下文或分离的嵌套浏览上下文)。

parent 是一个用于访问类似于父窗口的 DOM 的属性。然而:

什么是浏览上下文WindowProxy 有什么作用?

让我们继续阅读。

2。浏览上下文

浏览上下文是向用户呈现Document 对象的环境。

WhatWG#Browsing context 说:

Web 浏览器中的选项卡或窗口通常包含浏览上下文,就像框架集中的 iframe 或多个框架一样。每个浏览上下文都有一个对应的 WindowProxy 对象。

3。窗口代理

窗口代理是一个代理window 对象并强制执行例如安全约束的对象。对于window 对象,可以有多个代理(例如,来自两个不同域的两个iframes 访问同一个父级)。

WhatWG#proxy-object 说:

WindowProxy 对象允许脚本就像每个浏览上下文都有一个 Window 对象一样,同时仍为每个 Document 保留单独的 Window 对象。

4。安全

我们快到了。继续阅读。

WhatWG#security-nav 说:

如果以下条件之一为真,则允许浏览上下文 A 导航第二个浏览上下文 B: 要么 A 的活动文档的来源与 B 的活动文档的来源相同,要么 浏览上下文A是一个嵌套浏览上下文,有一个顶层浏览上下文,它的顶层浏览上下文是B,或者 浏览上下文 B 是辅助浏览上下文,允许 A 导航 B 的开启者浏览上下文,或 浏览上下文 B 不是***浏览上下文,但存在 B 的祖先浏览上下文,其活动文档与 A 的活动文档具有相同的来源(实际上可能是 A 本身)。

5。扣除

如果两者都来自同一个域,iframe 能否从其parent 访问函数?让我们推断。

    parent 不是父对象的window 对象,而是WindowProxyiframe浏览上下文可以访问其父级,因为它们都具有相同的来源(请参阅上面的第一个安全条件)。

您会看到:如果您仔细阅读规范,您可以找到浏览器应该如何运行的答案。阅读规范是一项后天的技能。这需要耐心和准确。

然而:这个世界并不那么美好。有些浏览器没有按照它们应该的那样实现规范。 告诫购买者

【讨论】:

以上是关于在 iframe 中使用 window.parent.myFunction 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

在vue中使用iframe标签

在 iOS 和 Android 上的 iframe 中使用 jquery 打印 iframe

如何在 React Native 中使用 iframe?

如何在 Wordpress 插件中使用 jQuery 从 Iframe 调用 Iframe?

是否可以在 iFrame 中使用 JavaScript 获取 iFrame 父页面的引用者?

在 iframe 中使用 Selenium:NoSuchElementException