javascript - Firefox 最新更新 - Javascript 问题

标签 javascript firefox

我正在使用使用原型(prototype)库的第三方软件。在 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 上不起作用。

我不确定解决这个问题是否可以解决我的问题,但至少这应该适用于我的库代码。

最佳答案

我有点惊讶地发现它可以在任何浏览器上运行。通过允许父级表单提交,您将拆除该页面,这意味着拆除 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>

如果框架中的表单进行了大量上传,我不认为它会起作用(尽管我对此可能是错误的)。

关于javascript - Firefox 最新更新 - Javascript 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58725367/

相关文章:

javascript - 如何使用 jQuery/JavaScript 检测 ios 设备并仅隐藏 iPhone 和 iPad 的 Bootstrap 模式?

javascript - 使用javascript将图像转换为blob

javascript - jquery-ui 关闭对话框

html - 响应式设计在 Firefox 中失效

html - 如何在 IE 和 Mozilla 中查看完整的源代码

html - 当使用 <table> 父元素以百分比定义宽度和高度时,图像不会呈现

Javascript:为什么 FOR 循环会跳过所有其他匹配项?

Javascript从窗口顶部滑动不可见的div

css - 奇怪的 Internet Explorer 和 Firefox CSS 问题

html - 输入占位符在 Firefox 中未垂直对齐