我编写了一个书签,它接收一个 Django 表单,并通过一个新的 div 元素的 innerHtml 将其插入 Dom,该元素是通过 javascript 创建的,并附加到现有 html 文档的正文中。第一次提交是一个 ajax 请求(工作正常),如果表单由于未知用户而被 Django 拒绝,则提交函数与 ajax 解除绑定,并在没有 ajax 的情况下重新提交到弹出窗口以验证没有 CORS 的用户。该过程在 IE 中完美运行,但在单击提交按钮时会使 chrome 选项卡崩溃。
测试:我认为可能是最初的 ajax 提交导致了问题。但是,如果我在注入时使用没有 ajax 的相同进程,提交也会失败。如果我在注入完成后从浏览器复制 html 代码并创建一个新的 html 文档,然后在 chrome 中打开它,一切正常。此外,如果我在注入之前删除包含表单字段的 div,则提交按钮可以工作。这让我相信它与在现有页面上的 Dom 加载后注入表单有关。有没有办法在不刷新页面的情况下重新加载 Dom 或强制 innerHtml 在注入时在 Dom 中正确注册?
没有控制台错误,只是一个 aww,快照!显示此网页时出现问题。
要复制问题,请按照以下步骤操作:(我在 Windows 8 上使用 Chrome 版本 23.0.1271.64 m)
(步骤 1)转到图像 url:itsblackcurrent.com/wp-content/uploads/2012/07/what-hi.png
(步骤 2)转到 chrome 控制台并输入以下代码:
o = document.createElement("div");
o.setAttribute("id", "overlay");
o.innerHTML = '<div class="modal fade" id="new-pin"><div class="modal-header"><h3>New Pin</h3></div><form action="" enctype="multipart/form-data" method="get" id="ajaxform" name="pin_form" class="form-horizontal"><div class="modal-body"><div id="div_id_url" class="control-group"><label class="control-label" for="id_url">URL</label><div class="controls"><input type="text" name="url" id="id_url" /></div></div><div id="div_id_image" class="control-group"><label class="control-label" for="id_image">or Upload</label><div class="controls"><input type="file" name="image" id="id_image" /></div></div><div id="div_id_description" class="control-group"><label class="control-label" for="id_description">Description</label><div class="controls"><textarea id="id_description" rows="10" cols="40" name="description"></textarea></div></div><div id="div_id_tags" class="control-group"><label class="control-label" for="id_tags">Tags</label><div class="controls"><input type="text" name="tags" id="id_tags" /></div></div></div><div class="modal-footer"><div class="messageContainer"></div><button id="btnsubmit" type="submit" class="btn btn-primary">Submit</button><a id="cancel" onclick="removeOverlay()" data-toggle="modal" class="btn">Cancel</a></div></form></div>';
document.body.appendChild(o);
(第 3 步)单击提交并查看 Chrome 崩溃!
(第 4 步)如果在 DOM 加载之前加载完全相同的代码,它就可以工作。将以下内容粘贴到新的文本文档中并另存为 .html。
<body>
<script>
Copy and paste all the code from step 2 here
</script>
</body>
(第5步)用chrome打开.html文件,提交不会崩溃。