前端踩坑日记

746 阅读1分钟

兼容性问题

SCRIPT70: Permission denied

项目用AngularJS,在升级JQuery到1.12.x后,使用IE浏览器进入项目首页,点击按钮打开窗口时控制台报SCRIPT70: Permission denied。 查阅各种资料应该是关于iframes的问题,迫于时间也没有深究,最后修改JQuery源码解决问题。

function Sizzle( selector, context, results, seed ) {
  var match, elem, m, nodeType,

  i, groups, old, nid, newContext, newSelector;

  //通过增加下面一段try catch解决
  //http://bugs.jquery.com/ticket/14535

  try{
    document === document; //may cause permission denied
  }
  catch(err){
    document = window.document; //resets document, and no more permission denied errors.
  }

  if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
    setDocument( context );
  }

  //..............//
}

至于为什么这么改,希望有大佬指点迷津

jQuery.dataTables IE下无数据显示null的问题

在chrome、Firefox中,如果没有render函数,表格里无数据都能正常显示为空字符串,然而在IE下显示为'null'。需要修改_fnGetCellData的返回值。

function _fnGetCellData() {
...
/**
 * 没直接使用三目
 * defaultContent ? defaultContent : '';
 * 原因是defaultContent可能为0
 */
if (typeof defaultContent == 'undefined') {
    defaultContent = '';
}
return defaultContent;
}

不能执行已释放script的代码

从Dom中删除IFrame后,IE9+会回收内存。
项目中用了类似于window的对象top,各个模块的通讯通过定义全局变量在top上,在IE删除iframe后回收内存,再去操作相关的参数就会报错。

为什么要使用[].slice.call(arguments)

因为arguments是类数组对象,虽然和数组长得很像,但并不是真正的数组,不能使用数组的方法,所以借用Array.prototype上的方法使arguments转换成真正的数组。

Chrome浏览器下载的一点小问题

前段时间在做导出日志的需求,发现底层返回的包名里带有','在Chrome浏览器是下载不成功的。目前是通过替换这个逗号解决的。