【问题标题】:Form targetting an iframe is opening new tab in Chrome以 iframe 为目标的表单正在 Chrome 中打开新标签
【发布时间】:2017-09-19 10:25:51
【问题描述】:

我正在尝试向 iframe 提交一个表单,这两个 iframe 都是在我的项目中使用 javascript 动态构建的。

<script>
document.querySelector('iframe').setAttribute('id', iframeId);
document.getElementById(iframeId).setAttribute('name', target);
document.getElementById(iframeId).setAttribute('width', width);
document.getElementById(iframeId).setAttribute('height', height);

document.querySelector('form').setAttribute('id', id);
document.getElementById(id).setAttribute('target', target);
document.getElementById(id).setAttribute('action', actionURL);

document.getElementById(id).submit();
<script>

这就是它稍后在浏览器 Web Inspector 中的外观。

<iframe id="my_frame" name="my_frame" width="700" height="400">
        <p>Your browser does not support iframes.</p>
</iframe>

<form id="my_form" target="my_frame" action="http://localhost:8080/MyProject/loadService" method="POST" style="display: none;">
    <input type="hidden" name="userId"/>
    <input type="hidden" name="locale"/>
</form>

这在 Firefox 中对我很有效,但在 Chrome 中它会打开一个新标签。我尝试了here 给出的解决方案,但没有解决问题。任何人都可以建议缺少什么吗?

【问题讨论】:

    标签: javascript html google-chrome iframe


    【解决方案1】:

    This post建议在提交表单之前动态添加表单的target-attribute。

    由于您要动态创建表单和 iframe,您是否尝试过在表单之前创建 iframe 并将其添加到 DOM? 也许目标 ID 必须存在于表单创建时才能正常工作。

    【讨论】:

    • 我已经创建了表单和 iframe。我所做的只是设置表单属性,例如操作 url、目标、id 和 iframe 属性(例如名称和 id),因为我从服务器获取它然后提交表单。更新了我的问题
    【解决方案2】:

    我有同样的问题。我关注了this 为我修复的帖子。尝试动态生成 iframe,并确保在将 iframe 附加到 DOM 之前设置表单所针对的名称/ID。

    示例:

    iframe = document.createElement('iframe');
    iframe.name = 'target_name';
    iframe.id = 'target_name';
    
    // now append to DOM, ideally to a container element
    document.body.appendChild(iframe);
    

    【讨论】:

      【解决方案3】:

      从您的 html 中删除 iframe 并尝试这样做:

      //Create the iframe, set its attributes and append it before the form
      var iframe = document.createElement('iframe');
      iframe.name = 'my_frame';
      iframe.id = 'my_frame';
      iframe.width = '400';
      iframe.height = '700';
      var form_element = document.getElementById('my_form');
      form_element.parentNode.insertBefore(iframe, form_element);
      
      //Submit form to iframe
      document.getElementById('my_form').submit();
      

      【讨论】:

      • @jeremypress 的回答也确实很有帮助,但这更详尽。谢谢!
      猜你喜欢
      • 2011-10-28
      • 2016-12-23
      • 1970-01-01
      • 2014-04-18
      • 2019-09-04
      • 2022-07-06
      • 2012-09-01
      • 2022-11-18
      • 1970-01-01
      相关资源
      最近更新 更多