前端踩坑日记

兼容性问题

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转换成真正的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值