Firefox最新更新-Javascript问题

我正在使用使用原型库的第三方软件。在Firefox的最新更新(版本68及更高版本)之前,它运行良好。在其他浏览器中仍然可以使用。我尝试调试,并且每当引入断点并逐步执行代码时,它就会起作用。我找到了下面的代码行,如果我跨过这些代码并让其运行,则可以解决问题。但是,如果我让代码在此之前运行,就会出现问题。

return formView.submit();

有什么主意吗?我什至可以接受黑客攻击。

更新

我按照建议创建了MRE。这是链接https://brandsoftinfotech.com/test/firefox-frame-submit/

我创建了2种形式,一种在父页面中,一种在框架中。在提交父页面表单时,框架页面表单将被提交并将数据写入日志文件。提交时,表单页面仅显示该日志文件中的数据。

index.html

<!DOCTYPE html>
<html>
<head>
    <script>
        function submitFunction() {
            var myFrame = document.getElementById("myFrame");
            var myForm = myFrame.contentWindow.document.getElementById("myForm");
            myForm.submit();
        }
    </script>
</head>
<body>
    <form action="index-submit.php" onSubmit="submitFunction()">
        <input type="submit" value="Submit">
    </form>

    <iframe id="myFrame" src="frame-box.html"></iframe>
</body>
</html>

frame-box.html

<form action="frame-submit.php" id="myForm">
  First name:<br>
  <input type="text" name="firstname" value="Mickey"><br>
  Last name:<br>
  <input type="text" name="lastname" value="Mouse"><br><br>
</form>

这在Chrome,MS Edge上正常工作,但在Firefox上不工作。

我不确定是否可以解决此问题,但是至少这应该对我的库代码有效。

wawd1314 回答:Firefox最新更新-Javascript问题

我对它在任何浏览器上都能工作感到非常惊讶。通过允许父母提交表单,您将撕毁该页面,这意味着撕毁iframe,并且可能正在进行的任何请求都将被中止(或者如果未完全启动,则永远不会启动)。

我可能会改用ajax而不是进行实际的表单提交。

但是,如果要提交表单,则要可靠地执行此操作,必须先完成框架的提交,然后再提交父提交。最简单的方法是让框架提交以一个带有JavaScript的小页面作为响应,该页面告诉父代完成了:

<!DOCTYPE html>
<html>
<body>
<script>
if (parent && parent.formCallback) {
    parent.formCallback();
}
</script>
</body>
</html>

然后,父页面类似于:

<!DOCTYPE html>
<html>
<head>
    <script>
        function submitFunction() {
            var myFrame = document.getElementById("myFrame");
            var myForm = myFrame.contentWindow.document.getElementById("myForm");
            myForm.submit();
            return false; // <−−−−−−−− cancel submission
        }
        function formCallback() {                            // 
            document.getElementById("parentForm").submit();  // <−−−−−−−− Submit on callback
        }                                                    // 
    </script>
</head>
<body>
    <!--  vvvvvvvvvvvvvvv−−−−−−−− Added ID    -->
    <form id="parentForm" action="/index-submit" onSubmit="return submitFunction()">
        <input type="hidden" name="index-field" value="x">
        <input type="submit" value="Submit">
    </form>

    <iframe id="myFrame" src="frame-box.html"></iframe>
</body>
</html>

但是,仅检测iframe中位置的变化就可以摆脱困境。这将涉及到仅按照指示更改父页面:

<!DOCTYPE html>
<html>
<head>
    <script>
        function submitFunction(form) { // <−−−−−−−− Added parameter
            var myFrame = document.getElementById("myFrame");
            var myForm = myFrame.contentWindow.document.getElementById("myForm");
            myForm.submit();
            // Wait for the location of the iframe window to change
            setInterval(function() {
                if (String(myFrame.contentWindow.location).includes("frame-submit")) {
                    // Frame's form submitted,we can submit ours
                    form.submit();
                }
            },100);
            return false; // <−−−−−−−− cancel submission
        }
    </script>
</head>
<body>
    <form action="/index-submit" onSubmit="return submitFunction(this)">
    <!--                                                         ^^^^−−−−−−−−− added argument    -->
        <input type="hidden" name="index-field" value="x">
        <input type="submit" value="Submit">
    </form>

    <iframe id="myFrame" src="frame-box.html"></iframe>
</body>
</html>

如果框架中的表单进行了大量上传,我并不希望它起作用(尽管我对此可能有误)。

本文链接:https://www.f2er.com/3154131.html

大家都在问