【问题标题】:Posting form with a https:// action to hidden iframe将带有 https:// 操作的表单发布到隐藏的 iframe
【发布时间】:2011-03-26 23:00:12
【问题描述】:

我在页面上有以下内容:

<iframe width="1" height="1" name="hidden-iframe">
<form id="myform" method="POST" action="https://mysite.com/process-form-data.php" target="hidden-iframe">
<input name="data" />
<input type="submit" value="Submit" />
</form>
<script type="text/javascript">
    $('#myform').submit(function(){
        $('#myform').submit();
        setTimeout("location.reload(true);",5000);
        return false;
    });
</script>

我希望将表单发布到隐藏的 iframe,等待 5 秒(让表单数据有足够的时间发送),然后刷新页面。

如果表单操作是 http,则此过程非常有效。

然而,当表单动作是https时,当用户点击提交时,表单数据被发送,https://mysite.com/process-form-data.php被浏览器加载。表单数据不会被发布到隐藏的 iframe,没有 5 秒超时,并且原始页面没有刷新。

知道如何实现既定目标吗?我应该补充一点,表单的操作与页面本身位于不同的域上。显然,这里肯定发生了某种跨域安全问题。有没有更好的方法来做到这一点?我愿意接受任何建议。

【问题讨论】:

  • 所有浏览器都会出现这种情况吗?我在 Firefox 中遇到了同样的问题,它正在中止发布请求。

标签: forms iframe cross-domain


【解决方案1】:

是的,这是一个跨域安全问题。我相信即使他们在同一个域中,但一个是 SSL (https) 而另一个不是 (http),你也会遇到同样的问题。

是否可以建立一个服务(在https://mysite.com/)来接收您的帖子?然后,您可以发布 AJAX 帖子并使用您网站上的 JavaScript 响应响应。这也将比“等待 5 秒”更强大

希望这会有所帮助,并且是一种选择。如果做不到这一点,您剩下的选择是直接重定向到新域的表单(没有 iframe,整个新页面),然后重定向回您的站点。笨重,但对最终用户诚实。一个 (real, window.open()) 弹出窗口可能会让它稍微不那么刺耳。

【讨论】:

    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2013-07-25
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多