【问题标题】:Can the src attribute of an iframe perform a POST request?iframe 的 src 属性可以执行 POST 请求吗?
【发布时间】:2018-08-26 15:49:51
【问题描述】:

我需要使用 src 属性加载 iframe。我需要将很多附加信息附加到查询中。目前,我只是将所有这些信息放在一个参数中,如下所示:

<iframe src="mywebsite.com/get_iframe?aVeryLongString"></iframe>

但是,aVeryLongString 可能会变得很长。只要我从服务器收到“414(Request-URI Too Large)”错误。

有没有办法在不出现此错误的情况下发出此请求?

注意:iframe 的 url 带有它自己的 Content-Security-Policy,所以我不能只使用 srcdoc 来代替 src。除非即使你使用 srcdoc 也有办法强制 CSP?

【问题讨论】:

  • aVeryLongString的形式是什么? name1=value1&amp;name2=value2 还是别的什么?
  • 为什么不直接发出 AJAX 发布请求并填充 div
  • 我忘了在示例中提及,但 iframe 是沙盒化的,其内容非常不安全。这就是为什么它也需要自己的 CSP。

标签: javascript html post iframe


【解决方案1】:

如果iframe 包含HTML,我会倾向于做Scott marcus mentioned in a comment:做一个ajax POST 并填充div 而不是使用iframe

但是,如果您出于某种原因无法做到这一点(并且可能有多种原因您无法做到,尤其是如果 iframe 将包含 HTML 以外的内容):

如果aVeryLongString 是标准URI 编码的name1=value1&amp;name2=value2 表单,您可以给iframe 一个name,然后从JavaScript 代码向它发布一个表单。非常粗略:

<iframe name="the-iframe"></iframe>
<script>
(function() { // Scoping IIFE to avoid creating global vars
    var form, input;
    form = document.createElement("form");
    form.action = "/path/to/the/resource"; // I didn't use your `src` because it's incorrect
    form.target = "the-iframe";
    for (/*...looping through the fields you need to add...*/) {
        input = document.createElement("input");
        input.type = "hidden";
        input.name = /*...the field name...*/;
        input.value = /*...the field value...*/;
        form.appendChild(input);
    }
    document.body.appendChild(form);
    form.submit();
})();
</script>

旁注:src="mywebsite.com/get_iframe" 不正确,该 URL 将是 //mywebsite.com/get_iframe(相对于协议的 URL),或者,如果从该站点加载页面,则为 /get_iframe 或可能是 ./get_iframe

【讨论】:

  • 它几乎可以工作了,但是由于某种原因,内容不是用内容填充 iframe,而是在另一个选项卡中打开。 iframe 看起来像这样: $(&lt;iframe id="${idForIframe}" name="${idForIframe}" sandbox="allow-scripts allow-forms allow-popups" frameborder=0 scrolling="no"&gt;&lt;/iframe&gt;) 表单使用“form.target = idForIframe;”还有什么吗?
  • @FlorianDietz - 有什么东西在处理这些令牌吗?它是客户端还是服务器端?名称似乎不匹配。
  • NVM,问题是在请求时 iframe 还不是 DOM 的一部分,所以找不到它的名称。
  • @FlorianDietz - 啊!这就是我在上面包含实际标记的原因,所以iframe 元素位于script 之上。我应该说。 :-)
猜你喜欢
  • 2013-04-08
  • 2016-08-06
  • 2015-05-03
  • 1970-01-01
  • 2012-11-06
  • 2012-04-04
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
相关资源
最近更新 更多