“window.parent”和“window.dialogArguments”的区别是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“window.parent”和“window.dialogArguments”的区别是啥?相关的知识,希望对你有一定的参考价值。

参考技术A

“window.parent”和“window.dialogArguments”的区别主要体现在适用范围以及调用方法。

window.parent:frame框架里的页面要改其他同框架下的页面或父框架的页面就用parent。

window.dialogArguments:dialogArguments属性只适用于创建使用showModalDialog和showModelessDialog方法的窗口。dialogArguments只能在mode和modeless窗口中才能使用,可以传递传递任意类型的值。

window.dialogArguments 调用方法如下:

父类窗口代码(弹出模式对话框):

window.showModalDialog( url, window ); 

例如:

//子窗体关闭的时候刷新父窗体

window.dialogArguments.location.href=window.dialogArguments.location.href;

window.focus();

window.close();

//子窗口调用父窗口里的函数:

window.dialogArguments.函数名();

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

【中文标题】在 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浏览上下文可以访问其父级,因为它们都具有相同的来源(请参阅上面的第一个安全条件)。

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

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

【讨论】:

以上是关于“window.parent”和“window.dialogArguments”的区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章

js中window.opener和window.parent的用法

请问JavaScript语言中的window.close()和window.parent.close()有啥区别?

请问JavaScript语言中的window.close()和window.parent.close()有啥区别?

window.addEventListener 正在监听 window.parent.postMessage 两次

关于window.parent的浏览器兼容问题

window.parent.parent.是指啥?