在做页面统计的时候遇到了两个问题:

1.包含iframe的页面,在IE下按后退按钮不能刷新主页面。隐藏Iframe的src是统计程序的url,每点一次后退,就会发出一次页面加载时间请求。

2.由js动态创建的img标签会发出两个http请求,第一个请求在发出后就被aborted,但实际上统计脚本收到了该请求,造成数据重复入库。

针对第一个问题,怀疑是IE针对iframe处理同firefox不同。后来查资料才知道,IE会把iframe访问过的页面也记录进history,点击后退按钮时,其实是重新载入iframe中的url,因此表面上看起来是主页面不能刷新,其实隐藏的iframe是刷新了的,因此会造成点后退按钮发出不希望的请求。

针对第二个问题,IE处理动态创建的img,在设置img.src时会发出图片请求,因此把img.src放到appenChild方法之后设置就可以避免这种情况。

附iframe在不同浏览器下的表现:

AJAX教程: 两种iframe的区别 (怎样控制浏览器的history)

浏览器history记录了我们访问的页面。当点击浏览器的后退或者前进按钮时候,就会在history中记录页面之间进行跳转。有时候,因为各种原因,程序员需要控制什么页面被放进浏览器的history中,哪些页面不放进去。把这种针对history的控制当做一种原型来看,它可以被用在更加复杂的AJAX和DHTML应用中。在这里,我会讲述两类iframe,当你面临AJAX设计问题或者遇到这两类iframe引起的奇怪bug时,这些知识将会非常有用。

有两类iframe,一种是在HTML文档中静态存在的iframe:

另外一种是在页面加载后动态创建的iframe:

好了,我们已经知道有两类iframe,但是谁在意这个事实呢?但是,不同的浏览器在是否将他们放入history的决策上有完全不同的表现!

下面我们来看看真相。
Firefox:

如果iframe是静态存在在HTML中时,iframe的任何src或者location改变都会被记录到浏览器history中。

如果iframe是在页面加载完成后动态创建的,那么iframe的任何src或者location改变都不会被记录到浏览器history中。

IE:

两种iframe的src或者location改变都会被记录到浏览器history中。

Safari:

两种iframe的src或者location改变都不会被记录。

通过下面两个例子可以看到我们的结论。两个例子我们都会动态改变iframe的location,分别加载四个不同的页面。

下面我们看两个例子

在第一例中,iframe是在HTML页面中静态存在的,当改变几次iframe的location后,在IE和Firefox的history中都记录了这几个页面地址。点击后退和前进按钮时,iframe中加载的页面会改变。
在第二例中,iframe是页面加载完成后,由js动态创建的。Firefox下只有主页面在浏览器history中,而IE下不仅主页面,而且iframe加载的所有页面都在history中。

注:当一个iframe在HTML页面中静态存在时,并且该iframe有初始化了的src属性,如

那么改src指向的url不会被记录在浏览器history中,只有iframe的src或location被成功改变后指向的url才会被记录。

因此,我们可以使用这两类iframe的特殊行为来实现我们想要的效果。比如,可以让通过CSS将iframe设置为不可见,然后选择这两种iframe中的一种来决定是否让浏览器记录iframe加载过的页面url。

转载于:https://www.cnblogs.com/ranran/p/iframe_history.html

iframe中的历史记录问题汇总及解决方案[转]相关推荐

  1. easyAR中webAR部分使用问题与解决方案汇总

    easyAR中webAR部分使用问题与解决方案汇总 Web AR使用方面 threejs使用方面 Web AR使用方面 1.开始识别后,程序每隔一段时间向服务器post一次数据请求,导致对识别图库的调 ...

  2. 解析Jquery取得iframe中元素的几种方法

    iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作,需要的朋友可以参考下 DOM方法:父窗口操作IFRAME:window.frames[&quo ...

  3. 从父页面在iframe中调用JavaScript代码

    基本上,我将iframe嵌入到页面中,并且iframe具有一些我需要从父页面调用的JavaScript例程. 现在相反非常简单,因为您只需要调用parent.functionName() ,但是不幸的 ...

  4. [easyui] 在iframe中操作父窗口的组件

    在项目中遇到问题: 需要在iframe中,操作父窗口的tabs组件,来添加一个新窗口,操作一直会报错: jquery.easyui.min.js:4995 Uncaught TypeError: Ca ...

  5. 浏览器兼容性问题汇总及解决方案

    最近一直在调测系统在各个浏览器的兼容性问题,真是让人抓狂啊,我最爱的Firefox竟然还是出问题最多的,好伤心--把碰到的问题和查到的一些资料总结一下写在这里,一方面方便自己以后使用,另一方面希望对遇 ...

  6. 使用ubuntu过程中遇到的问题汇总

    使用ubuntu过程中遇到的问题汇总 1.使用图形界面设置免密码登录之后,改回密码登陆失效 解决方案: https://askubuntu.com/questions/211084/how-do-i- ...

  7. sharepoint页面嵌入_在其他系统Iframe中显示SharePoint 页面

    前段时间在做一个项目,要求将SharePoint 的 OWA(Office Web Apps)中的文档显示页面嵌入到另外一个OA系统中,提供给用户可以通过浏览器查看SharePoint文档的能力. 嵌 ...

  8. 辐射4核能选项用计算机失败,玩游戏出问题了?《辐射4》PC版常见问题汇总和解决方案...

    玩游戏出问题了?<辐射4>PC版常见问题汇总和解决方案 2015-11-10 15:50:43来源:游戏下载编辑:评论(0) 万众期待的<辐射4>终于和我们见面了,但游戏刚刚发 ...

  9. android开发中遇到的问题汇总

    android开发中遇到的问题汇总(五),android汇总127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框 http://dwtedx.com/itshare_297.html1 ...

最新文章

  1. SAP and ABAP Memory总结
  2. POJ2255Tree Recovery
  3. 深圳市南山区派出所地址和电话列表
  4. go tcp客户端自动重连_在Go中构建并发TCP服务器样例
  5. 企业实施ERP有哪些收益分析-要做到心中有数
  6. iOS UIWebView清除缓存
  7. 射电天文偏振线的绘制
  8. (转载)计算机英语名词简释
  9. 气象数据源-要素、数据集、空间分辨率、网址
  10. 【axure教程】产品流程图的制作方法详解
  11. jquery ui php,推荐10款最热门jQuery UI框架[原创]_jquery
  12. 【美味蟹堡王今日营业】论文学习笔记10-02
  13. 【项目实战】别出心裁的小程序简历,让面试官耳目一新(第一个自己独立完成的小程序)
  14. 【Python数据分析】二手车价格预测
  15. 一文搞懂WiFi的所有知识点
  16. springboot springsecurity报错 **.LoginUser cannot be cast to **.LoginUser
  17. collectionView的每一组的组头部和尾部的设置
  18. UI设计课程教程分享:Banner的设计和技巧
  19. 橡皮擦的英语_2019年成人高考考试,语文数学英语政治想得高分答题技巧看这里...
  20. SM2 生成公钥私钥 签名 加解密 亲测可用

热门文章

  1. 源码 连接mysql_MySql轻松入门系列————第一站 从源码角度轻松认识mysql整体框架图...
  2. 198. 打家劫舍 golang 动态规划 数组越界
  3. redis源码剖析(四)跳表
  4. 《C++ Primer 第五版》(第6.1~6.3节) 函数形参和实参传递,可变参数列表和函数返回值
  5. C++ STL string 简单使用
  6. 高级IO--1 ---(五种典型IO,阻塞IO,非阻塞IO,信号驱动IO,异步IO, IO多路转接)
  7. 在win10上使用Vmware安装Mac OS
  8. 函数setjump和longjmp
  9. Centos 6.x
  10. 开发人员怎么看实施人员