Firefox 的 .submit() 问题

碰到一个很郁闷的问题。一个在 iframe 里调用父页面的 js 来提交表单,在其他浏览器都正常,但 firefox 上却提交不了。在 firebug 里直接调用可以,在父页面上用 js 调用也行。也许是 firefox 的防 csrf 功能的影响吧。

重现代码:

test1.php

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title>test1</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
</head>
<body>
<script type=”text/javascript”>
<!–
function foo() {
alert(‘foo’);
document.testForm.btn.value=’aaaa’;
document.testForm.submit();
}
//–>
</script>
<form method=”post” action=”test2.php” name=”testForm” target=”ifr”>
<input type=”submit” name=’btn’/>
</form>
<iframe src=” name=”ifr” id=”ifr”></iframe>
</body>
</html>

test2.php

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title>test2</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
</head>
<body>
<?php
print_r($_POST);
?>
<script type=”text/javascript”>
<!–
<?php if (isset($_POST[‘btn’])):?>
alert(‘111’);
parent.foo();
<?php else: ?>
alert(‘000’);
<?php endif; ?>
//–>
</script>
</body>
</html>

可以试试看在不同浏览器上的差异。

把 .submit() 换成 submit 控件的 .click() 也是一样。

最后还是用setTimeout(…., 1); 跳出调用栈来执行 .submit() 来解决。

4 thoughts on “Firefox 的 .submit() 问题

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.