【问题标题】:Iframe form not submittin in IE but working in Firefoxiframe 表单不在 IE 中提交,但在 Firefox 中工作
【发布时间】:2010-03-17 13:18:30
【问题描述】:

我有一个表单,可以将值发布到向导中的页面。当我在 Iframe 中加载此表单时,在 Firefox 中一切正常,它将使我进入向导的第二步并维护我填写的值。当我在 Internet Explorer 中测试时,我没有进入第二步步骤,而不是它让我回到向导的第一步,所有字段都为空白。当我在 Fiddler 中检查这一点时,我发现当我从 Firefox 在 Iframe 中发布表单时,与 Internet Explorer 相比,我得到了不同的响应。我怎样才能使它适用于所有浏览器?我做错了什么?

这是我从 Fiddler 那里得到的:

火狐

帖子:

Ressult Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
1   302 HTTP    www.dmg.eu  /brugman/budgetplanner/aanmelden.php    0   no-store, no-cache, must-revalidate, post-check=0, pre-check=0  Expires: Thu, 19 Nov 1981 08:52:00 GMT  text/html; charset=UTF-8    firefox:6116    

获取:

#   Result  Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
2   200 HTTP    www.dmg.eu  /brugman/budgetplanner/ 40.677  no-store, no-cache, must-revalidate, post-check=0, pre-check=0  Expires: Thu, 19 Nov 1981 08:52:00 GMT  text/html; charset=UTF-8    firefox:6116

Internet Explorer

帖子:

Result  Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
73  302 HTTP    www.dmg.eu  /brugman/budgetplanner/aanmelden.php    0   no-store, no-cache, must-revalidate, post-check=0, pre-check=0  Expires: Thu, 19 Nov 1981 08:52:00 GMT  text/html; charset=UTF-8    iexplore:536    

获取:

Result  Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
74  302 HTTP    www.dmg.eu  /brugman/budgetplanner/ 0   no-store, no-cache, must-revalidate, post-check=0, pre-check=0  Expires: Thu, 19 Nov 1981 08:52:00 GMT  text/html; charset=UTF-8    iexplore:536    

希望有人知道差异是什么:)。

编辑:(更多信息......)

html

<%@ CODEPAGE=65001 %>
<% Response.Charset = "utf-8" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta name="robots" content="index,follow,noodp" />

<title>Hey</title>

</head>

<body class="body">

<iframe width="800px" height="1024" src="http://www.dmg.eu/brugman/budgetplanner/aanmelden.php">
</iframe>

</body>

</html>

【问题讨论】:

  • 您是如何提交表单的?使用enter 键还是鼠标键?当按下enter 键时,MSIE 往往会做一些完全出乎意料的事情。此外,响应标头并不是真正令人感兴趣的,调试请求标头(发送了哪些参数?等)和 PHP 代码(执行了哪些行,哪些行不执行?等)将产生有关该问题的更有趣的见解。
  • 我正在使用提交按钮,我正在点击该按钮。
  • 好的,如果您按要求添加更多调试信息,那么我们也许能够指出原因。只有响应标头并没有提供太多的工作。目前还不清楚请求了什么以及代码实际做了什么:)
  • 这很简单,我有一个表单,当我在 IE 的 iframe 中加载该表单时,它不会让我进入该过程的第二步,但在 Firefox 中它会。您还需要什么信息??
  • 您需要在 HTTP sn-ps 中包含 LOCATION 标头的内容才能使用。 (Fiddler 的“复制 > 简洁摘要”选项应该会自动为您执行此操作)。 FWIW,您不应该在响应中返回预检查或后检查指令,但这是一个 PHP 错误。

标签: internet-explorer firefox forms fiddler


【解决方案1】:

此博客上的信息提供了完整的详细信息和解决代码:

http://viralpatel.net/blogs/2008/12/how-to-set-third-party-cookies-with-iframe.html

如何在 ASP.Net 中设置 p3p http header?

HttpContext.Current.Response.AddHeader("p3p", "CP=\""IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""")

如何在 PHP 中设置 p3p http 标头?

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

如何在 JSP 中设置 p3p http header?

response.setHeader("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'")

如何在 ColdFusion 中设置 p3p http 标头?

<cfheader name="P3P" value="CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'" />

从博文中删除,以防万一它死了。

【讨论】:

  • 啊,只是节省了我几个小时的调试时间!谢谢
【解决方案2】:

在第一种情况下,我认为请求/响应的顺序如下,如果我错了,请纠正我。

我们将调用 A brugman/budgetplanner/aanmelden.php 和 B /brugman/budgetplanner/。

您在某个页面 X 和 FF 中执行以下操作:

Request: POST A 
Response: Redirect B (that's the 302)

Request: GET B
Response: Result of B

然而,在 IE 中,它看起来像下面这样:

Request: POST A
Response: Redirect B (that's the 302)

Request: GET B
Response: Redirect Y (We see another 302)

发生的情况是第二种情况导致 B 也返回重定向标头。问题不在客户端,而在服务器。

其他人都要求的其他信息:

  • 您发布的 4 个提琴手标头的请求/响应主体是什么(转到检查员,顶部和底部窗格上的原始视图以获取此信息)。这将更清楚地显示我上述序列中 X 和 Y 的值。
  • 什么是服务器 PHP 代码,问题几乎肯定在 B (/brugman/budgetplanner/)

根据 IE 和 FF 比较第二个请求的正文应该可以让您了解服务器如何看待它们(对于服务器而言,客户端只是准备请求的代理)。根据请求的不同,服务器发回不同的响应。

【讨论】:

  • 问题确实是预算规划器,如果未设置会话,它会重定向回向导中的第一步。在提交的第一部分,我一直盯着自己看……
【解决方案3】:

以下是问题:

我正在提交表单,检查帖子,然后设置会话。 未设置此会话,因为在 IE 中,当您想在 iFrame 中使用会话变量时,您必须设置标头设置。

这是用于执行此操作的代码:

ADD IN THIS LINE IN ORDER TO SOLVE THE INTERNET EXPLORER ALWAYS GET NEW SESSION ISSUE
header('P3P: CP="CAO PSA OUR"');

这是为了确保 IE 允许您使用会话。

更多信息: http://www.w3.org/P3P/

【讨论】:

  • 请注意,设置 P3P 标头意味着您正在就如何使用设置它的 cookie 做出具有法律约束力的声明。因此,请确保您的 P3P 语句是正确的。
猜你喜欢
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
相关资源
最近更新 更多