Internet Explorer重新加载IFrame

Internet Explorer reloads IFrame

本文关键字:加载 IFrame Explorer 新加载 Internet      更新时间:2023-09-26

我有一个web表单(使用ZK框架),比如说在http://www.example.com/myform

此表单包含在我的主页中(例如http://www.anotherexample.com)。

现在奇怪的是:

在InternetExplorer9-11中,每当我取消聚焦字段时,IFrame就会完全重新加载(在那里会进行一些字段检查)。但这种情况只发生在IE和IFrame中。如果我加载http://www.example.com/myform直接使用,效果良好。

另一个让整件事变得奇怪的细节是:如果我在IE中添加打开一个选项卡并加载http://www.example.com/myform在那里,iframe突然也正常工作(在一次重新加载之后)。

不幸的是,IE在重新加载iframe时没有显示任何错误,所以我不知道发生了什么以及为什么。其他浏览器(Firefox、Chrome)与IFrame配合得非常好。

有什么线索吗?原因是什么?

在这种情况下,原因是P3P,如下所述:https://blogs.msdn.microsoft.com/ieinternals/2013/09/17/a-quick-look-at-p3p/

简而言之,Internet Explorer拒绝来自iframe等中第三方上下文(不同域)的cookie。这当然会导致上述行为:

  • 发送到ZK后端的任何请求(包括在"焦点丢失"时触发的请求)都不会有会话id(因为没有cookie),因此ZK将触发完全重新加载
  • 在另一个选项卡中打开ZK应用程序可以创建一个cookie,然后iframe中的ZK应用可以访问该cookie

解决方案是发送正确的P3P头,在ZK中,这可以通过各种方式完成,例如通过.zul文件头指令、servlet过滤器或直接在Web服务器上完成。完成此操作后,该应用程序在IE 9-11中正常工作。