我无法在表单提交时捕获事件。
我正在处理我无法控制的第三方iframe,当用户点击那里的提交按钮时,它调用javascript函数在javascript中执行form.submit():
target="_parent".
此第三方iframe也位于嵌套iframe中。
由于这包含了html javascript和不同的文档,我试图尽可能地代表它:
pseudocode:
[page mydomain.com/main]
[iframe mydomain.com/inner-frame]
<script type="text/javascript">
window.onbeforeunload = function(){
alert('trying to submit');
}
</script>
[iframe third-party-iframe.com]
<form action="mydomain.com/form-action" target="_parent" method="POST">
<input type="submit" />
</form>
[/ third party iframe]
[/iframe]
[page]
问题是,似乎表单提交事件未在父文档中一致地捕获。
我需要知道这一点,所以我可以在表单提交后做点什么。
在firefox中,onbeforeunload事件会触发,但在Chrome中它不会触发,并且在触发任何事件之前似乎错误地出现了“不安全的JavaScript尝试访问帧”。
同样奇怪的是,表单提交不会提交给iframe的父级,它只是打开一个带有该url的新选项卡(在我的示例中为form-action.php)。
有人能说清楚这种行为是什么吗?我甚至不确定这种行为(没有事件被触发,新的浏览器选项卡)是javascript,iframe或浏览器的函数。
此外,当您提交_parent时,正确的事件是什么?在哪里听?我假设_parent引用框架的直接父级。
===================================
更新
我误解了这个问题,但我弄明白为什么它不起作用:
实际上代码看起来更像是这样:
pseudocode:
[page third-party-site.com]
[page mydomain.com/main]
[iframe mydomain.com/inner-frame]
<script type="text/javascript">
window.onbeforeunload = function(){
alert('trying to submit');
}
</script>
[iframe third-party-site.com/iframe]
<form action="mydomain.com/form-action" target="_parent" method="POST">
<input type="submit" />
</form>
[/ third party iframe]
[/iframe]
[page]
[/page]
出于调试原因,我正在查看第一个iframe外的页面,所以我假设third-part-site.com上的表单试图重定向mydomain.com中的内容,并且浏览器阻止了这个孩子的第三个-party iframe重新指导父母。
当我将mydomain.com放回到它自己的iframe中时,它将在生产代码中,浏览器不再阻止此重定向 - 看来这是导致我的跨域问题,因为代码不起作用当我尝试设置包含mydomain.com的localhost iframe时。浏览器看起来希望顶级父域与内部内部内部iframe域相同。
这表明_parent表单属性不引用上下文父项,它是指顶级父项? (虽然事件捕获发生在那个iframe的直接父母......)也许它总会一直冒泡?
btw,如果有人想知道,这是一个Facebook应用程序,它是一个画布页面,其中包含一个内部有多个朋友请求选择器的iframe。
答案 0 :(得分:1)
我正在研究类似的问题,并且在Clickjacking上发现了以下关于这个有趣的琐事的文章:
然而,如果攻击者附上了 在另一个框架内的受害者(a 双帧),然后访问 parent.location成为安全性 由于违反了所有流行的浏览器 到 后代框架导航 政策的。此安全违规 禁用反作用 导航
“descendant frame navigation policy”似乎对后代帧可以对父帧做什么设置了一些限制。
我知道这不能回答这个问题,但也许它会解释这个问题。但也许不是。只是想分享。