在 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.parent
是 iframe
的父节点的 DOM 的代理
如果来源相同,则允许访问
真的很长很长的答案
我试图通过阅读规范向您展示如何得出这个结论,同时牢记:从iframe
中访问parent
的特征是什么?
让我们开始吧。很长的一段文字。
1。 DOM 属性parent
WhatWG#dom-parent 说window.parent
:
浏览上下文中
Document
的Window
对象的父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
对象,而是WindowProxy
。
iframe
的浏览上下文可以访问其父级,因为它们都具有相同的来源(请参阅上面的第一个安全条件)。
您会看到:如果您仔细阅读规范,您可以找到浏览器应该如何运行的答案。阅读规范是一项后天的技能。这需要耐心和准确。
然而:这个世界并不那么美好。有些浏览器没有按照它们应该的那样实现规范。 告诫购买者。
【讨论】:
以上是关于在 iframe 中使用 window.parent.myFunction 是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 和 Android 上的 iframe 中使用 jquery 打印 iframe
如何在 Wordpress 插件中使用 jQuery 从 Iframe 调用 Iframe?