日期:2014-05-16  浏览次数:20384 次

哈哈找到一个能动态加载js的方法
哈哈找到一个能动态加载js的方法
//加载新的js
function _GetJsData(url, callback) {
    var scripts = document.createElement("script");
    document.body.appendChild(scripts);

    scripts.onload = function() {
        callback();
        document.body.removeChild(this);
    };
    scripts.onreadystatechange = function() {
        if (this.readyState == "loaded") {
            callback();
            document.body.removeChild(this);
        }
    };
    scripts.charset = "GBK";
    scripts.src = url;
}
_GetJsData('http://www.uefirst.com/index.js',isok);
var isok=function(){alert('isok')};

http://www.uefirst.com/bbs/read-htm-tid-22.html
1 楼 632244434 2011-04-18  
同一域下的js,还有一个方法
XHR 获取js文本,然后eval~
这样是同步的。~ 不需要callback
2 楼 foxtool23 2011-04-18  
632244434 写道
同一域下的js,还有一个方法
XHR 获取js文本,然后eval~
这样是同步的。~ 不需要callback

我是需要callback的,比如url是个json数据
但是你的方法来段代码看看呗....
3 楼 foxtool23 2011-04-18  
你说的是不是这种:
http://www.uefirst.com/bbs/read-htm-tid-50.html
jsonp的
4 楼 LoriSun 2011-04-21  
http://www.sencha.com/forum/showthread.php?60350-Ext.ux.OnDemandLoad-Dynamic-load-js-file-and-invoke-the-method-in-it
5 楼 cucumber 2011-04-22  
这种onload是dom规范里面的吗?浏览器支持情况如何啊??
6 楼 GhostWolf 2011-04-22  
http://images.39.net/js/google/google_730_ask.js  似乎这个没办法加载
7 楼 denger 2011-04-23  
jquery、prototype 等之类的框架几年前就已经有了...~ 去看看源码吧...
8 楼 nbkangta 2011-04-24  
foxtool23 写道
632244434 写道
同一域下的js,还有一个方法
XHR 获取js文本,然后eval~
这样是同步的。~ 不需要callback

我是需要callback的,比如url是个json数据
但是你的方法来段代码看看呗....


callback就直接是载入的JS文本啦,可以看看高性能Javascript这本书
9 楼 runjia1987 2011-04-24  
Jquery 1.4源码:

var head = document.getElementsByTagName("head")[0] ||        
                             document.documentElement;
    var script = document.createElement("script");
    script.src = s.url;
    // Handle Script loading
    // Attach handlers for all browsers
    script.onload = script.onreadystatechange = function() {
         if ( !done && (!this.readyState ||
                     this.readyState === "loaded" || this.readyState === "complete") ) {
             done = true;
             jQuery.handleSuccess( s, xhr, status, data );
             jQuery.handleComplete( s, xhr, status, data );
             // Handle memory leak in IE
             script.onload = script.onreadystatechange = null;
             if ( head && script.parentNode ) {
                 head.removeChild( script );
              }
           }
        };
 }
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
 // This arises when a base node is used (#2709 and #4378).
 head.insertBefore( script, head.firstChild );
 // We handle everything