Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iframe中获取javascript来修改父文档?_Javascript_Iframe - Fatal编程技术网

如何在iframe中获取javascript来修改父文档?

如何在iframe中获取javascript来修改父文档?,javascript,iframe,Javascript,Iframe,因此,我有两个文档dA和dB分别托管在两个不同的服务器sA和sB上 documentda有一些JS,它打开了一个iframe src'ing Document dB,上面有一个表单。当文档数据库中的表单提交给服务器sB上的表单处理程序时,我希望dA页上的iframe关闭 我希望这已经足够清楚了。有办法做到这一点吗 谢谢 -马拉 更新:除了通过插入的javascript,我无法控制dA或sA。由于浏览器/javascript安全沙箱策略,这不可能实现。也就是说,有可能通过一些黑客技术超越这些限制。

因此,我有两个文档dA和dB分别托管在两个不同的服务器sA和sB上

documentda有一些JS,它打开了一个iframe src'ing Document dB,上面有一个表单。当文档数据库中的表单提交给服务器sB上的表单处理程序时,我希望dA页上的iframe关闭

我希望这已经足够清楚了。有办法做到这一点吗

谢谢

-马拉


更新:除了通过插入的javascript,我无法控制dA或sA。由于浏览器/javascript安全沙箱策略,这不可能实现。也就是说,有可能通过一些黑客技术超越这些限制。有各种各样的方法,有些涉及到Flash

如果可能的话,我建议您不要这样做,但如果您必须这样做,我建议您使用此处提到的DNS方法:

主要摘录:

假设域D想要 连接到域E。简而言之, 诀窍是使用DNS指向 D的子域,D_s,到E的服务器。 在这样做的过程中,D_s承担了责任 E的特征,同时 D


由于浏览器/JavaScript安全沙箱策略,这是不可能的。也就是说,有可能通过一些黑客技术超越这些限制。有各种各样的方法,有些涉及到Flash

如果可能的话,我建议您不要这样做,但如果您必须这样做,我建议您使用此处提到的DNS方法:

主要摘录:

假设域D想要 连接到域E。简而言之, 诀窍是使用DNS指向 D的子域,D_s,到E的服务器。 在这样做的过程中,D_s承担了责任 E的特征,同时 D


这样做的机制可能会导致跨站点脚本攻击(因为您可以做的不仅仅是删除页面内容中的良性内容)


一种安全的方法将限制为只清空/隐藏iframe文档本身,但如果包含它的iframe大小固定,则页面上只会出现一个空白点

这样做的机制可能会导致跨站点脚本攻击(因为您可以做的不仅仅是删除一点良性的页面内容)


一种安全的方法将限制为只清空/隐藏iframe文档本身,但如果包含它的iframe大小固定,则页面上只会出现一个空白点

如果您无法控制dA或Sa,由于浏览器安全限制,这是不可能的。甚至闪存方法也需要访问两台服务器

如果您无法控制dA或Sa,由于浏览器安全限制,这是不可能的。甚至闪存方法也需要访问两台服务器

假设我创建了一个页面,该页面包含一个覆盖整个页面的框架。 在yourbank.com上创建一个链接,然后单击该链接。现在,如果我可以使用javascript修改框架(银行网站)的内容,我将能够非常轻松地读取您正在使用的密码,并将其存储在cookie中,发送到我的服务器,等等

这就是您无法修改另一个框架中的内容的原因,该框架的内容不来自同一域。但是,如果它们来自同一个域,您应该能够根据需要对其进行修改(两个页面都必须位于您的服务器上)

您应该能够使用以下代码访问iframe:

window["iframe_name"].document.body

假设我创建了一个页面,其中包含一个覆盖整个页面的框架。 在yourbank.com上创建一个链接,然后单击该链接。现在,如果我可以使用javascript修改框架(银行网站)的内容,我将能够非常轻松地读取您正在使用的密码,并将其存储在cookie中,发送到我的服务器,等等

这就是您无法修改另一个框架中的内容的原因,该框架的内容不来自同一域。但是,如果它们来自同一个域,您应该能够根据需要对其进行修改(两个页面都必须位于您的服务器上)

您应该能够使用以下代码访问iframe:

window["iframe_name"].document.body

其他人解释了安全问题。但是这个问题是合理的,有这样的用例,在某些场景中可以做你想做的事情

W3C在
文档
上定义了一个名为
的属性,用于检查安全权限。这一属性可以由两个文档协同操作,因此在某些情况下它们可以相互访问

管理文件是。看看正如您所看到的,这个属性是在那里定义的,并且…它是只读的。实际上,所有浏览器都允许修改它:

  • Mozilla的
  • 微软的
修改不能是任意的。通常只允许使用超级域。这意味着您可以使由不同服务器提供服务的两个文档相互访问,只要它们有一个公共的超级域

所以,如果您想要两个页面进行通信,您需要添加一个小的单行程序,它应该在页面加载时运行。像这样的事情应该可以做到:

document.domain = "yourdomain.com";
现在,您可以从不同的子域为它们提供服务,而不会丢失它们的可访问性


显然,你应该注意时间问题。如果您建立某种通知协议,则可以避免这些问题。例如,一个页面(母版)设置其域,然后加载另一个页面(服务器)。当服务器运行时,它会更改其域并访问主机,从而触发某些功能。

其他人解释了安全含义。但是这个问题是合理的,有这样的用例,在某些场景中可以做你想做的事情

W3C在
文档
上定义了一个名为
的属性,用于检查安全权限。这一属性可以由两个文档协同操作,因此在某些情况下它们可以相互访问

管理文件是。看看尽你所能