博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
img.onload与script.onload实现的不同写法
阅读量:5821 次
发布时间:2019-06-18

本文共 1767 字,大约阅读时间需要 5 分钟。

在http://www.cnblogs.com/outside/p/3714482.html中,如何使用img.onload已经很清楚,当使用同样的方法创建script就有问题了

var script = document.createElement("script");

script.src = "js/jquery.js";

script.onload = function(){console.log("script")};

这样写的话,本以为能像img一样,控制台输出script,但在firfox,ie(本次测试只在firfox,ie中测试)中均没有输出。

在网上搜索了一下,大概说ie使用的是onreadystatechange事件来监听资源下载状态的改变控制输出,firfox使用onload事件控制资源下载完成后输出。

以下代码在ie中起作用

var script = document.createElement("script");

script.src = "js/jquery.js";
script.onreadystatechange = function(){
  if(this.readyState === "loaded" || this.readyState === "complete"){//ie7,8只认识complete
    alert("ie");
  }
}

当onreadystatechange换成script.onload = function(){console.log("script")};来测试,却没有输出,最后通过调试,发现在firfox中需要将script标签添加到dom中去才能触发事件(也即添加到dom中去才开始下载),这点跟ie不同(ie跟script添加src就开始下载资源了)。

最后在网上找了两段兼容代码,代码如下

第一:

var url = "js/jquery.js";

var script = document.createElement("script");
if(script.addEventListener){
  script.addEventListener("load", callback, false);
}else if(script.attachEvent){
  script.attachEvent("onreadystatechange", function(){

    var target = window.event.srcElement;

     if(target.readyState == "loaded" || target.readyState == "complete"){

      callback.call(target);

    }

  });

}
document.getElementsByTagName("head")[0].appendChild(script);

function callback(){

console.log("兼容")
}
script.src=url;

第二:

var script = document.createElement("script");

script.onload = script.onreadystatechange = function(){
  if(!this.readyState || this.readyState=='loaded' || this.readyState=='complete'){
    func();
    script.onload = script.onreadystatechange = null;
  }
};
document.getElementsByTagName("head")[0].appendChild(script);
function func(){
  console.log("兼容")
}

script.src = "js/jquery.js";

转载于:https://www.cnblogs.com/outside/p/3723350.html

你可能感兴趣的文章
没有JS的前端:体积更小、速度更快!
查看>>
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
论模式在领域驱动设计中的重要性
查看>>
有关GitHub仓库分支的几个问题
查看>>
云原生的浪潮下,为什么运维人员适合学习Go语言?
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
Linux 目录结构及内容详解
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
.net excel利用NPOI导入oracle
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>