iframe的src属性可以执行POST请求吗?

时间:2018-08-26 15:49:51

标签: javascript html post iframe

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

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

但是,aVeryLongString会变得很长。很久以来,我就从服务器收到“ 414(请求URI太大)”错误。

是否有一种方法可以发出此请求而不会出现此错误?

注意:iframe的url带有其自己的Content-Security-Policy,因此我不能只使用srcdoc而不是src。除非有使用srcdoc的方法来强制CSP?

1 个答案:

答案 0 :(得分:4)

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

但是,如果由于某种原因您不能这样做(可能有多种原因,您不能这样做,尤其是iframe是否具有HTML以外的其他内容):

如果aVeryLongString采用标准URI编码的name1=value1&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或可能为{ {1}}。