创建js,onload触发callback的方法实现(兼容主流浏览器)

之前在新浪博客上写了好几天的博客,一发表的时候内容全没了!愤怒啊!即使代码里有script标签,发表时候你好歹提示一下,取消发表或者所有内容给我复制到剪贴板啊!这用户体验真是差的要命!

转入正题:这里就不写仔细的测试兼容性的代码以及测试结果了,直接简述兼容问题,及解决方案,以及完整代码了!

兼容性问题:
    chrome等标准浏览器支持onload事件
    IE8、9等版本不支持onload事件,用onreadystatechange事件替代

    问题1:IE9等既支持onload事件,也支持onreadystatechange事件,所以回调方法有可能会被执行2次


兼容代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <script type="text/javascript">
        /*
         * @param {string} src 要加载的js路径
         * @param {function} fnCallback 加载完成后执行的回调方法
         */
        function loadJs(src, fnCallback) {
            // 创建script标签对象
            var oScript = document.createElement('script');
            // 有fnCallback参数的时候,绑定onload 和 onreadystatechange事件
            if (fnCallback) {
                oScript.onload = oScript.onreadystatechange = function () {
                    // onload 和 onreadystatechange 事件执行同一个方法
                    if (
                        // 不支持 onreadystatechange 事件的浏览器---支持onload
                        !this.readyState
                        // IE某版本,
                        || this.readyState === "complete")
                    {
                        // 防止IE内存泄漏
                        oScript.onload = oScript.onreadystatechange = null;
                        // 回调执行
                        fnCallback();
                    }
                }
            }
            var oHead = document.getElementsByTagName('head')[0];
            oScript.type = 'text/javascript';
            oScript.src = 'testBlock.js';
            oHead.appendChild(oScript);
        }

        // 方法执行
        loadJs('testBlock.js', function () {alert('执行回调方法成功!');})
    </script>
</body>
</html>
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值