firefox报错: attempt to run compile-and-go script...

会有一股神秘感。 提交于 2019-12-12 10:44:51

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

    此类错误只出现在低版本的firefox中, 如firefox10. firefox17及以上版本, chrome没有这个问题. 项目组的产品还在支持firefox10, 所以必须解决掉它. 

  • 导致问题的原因是: 

    某个子iframe中的脚本在父层窗口的对象中绑定一个事件, 后面这个iframe被删除了. 当父窗口的事件被触发时就会报错: attempt to run compile-and-go script on a cleared scope. 可能是低版本的firefox在删除iframe及scope时没有查看引用关系. 

    这种处理方式简单粗暴, 但可以解决隐性的内存泄漏问题. 高版本保留scope的处理方法, 不报错, 合乎逻辑, 却又可能导致内存泄漏: iframe删掉了, 因为scope被外层的一个事件引用而被保留. 如果scope中的内容较多, 或者会多次创建和删除, 内存就会涨上去. 

  • 定位过程
      一开始希望通过在firebug中打断点来定位问题. 但是在这种情况下, 浏览器根本不会执行事件回调函数. 估计是在准备执行上下文的时候就报错了. 

      后面希望通过在代码中搜索关键字来定位. 但是此业务模块的js代码写的就是一坨一坨的, 看着头都大了. 而且负责人也交接了好几轮. 现在的维护人员自己也不清楚模块做了啥操作. 只是有问题单的时候改改而已. 

      最后只能用笨拙的方法: 在jquery的添加事件方法中打上断点, 查看ifame加载过程中绑定了哪些事件, 绑定的对象及其所在的window. 这样才找到罪魁祸首: $(window.parent.document).mousedown(winClick);

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!