2013-08-01 56 views
0

SRC的Javascript iframe是可以當他們準備建立在其頭部元素腳本的iframe,iframe中被插入到DOM之前有腳本onload="alert(1)"火?沒有嵌套腳本

例1中,使用嵌套腳本:

var iframe = jQuery("<iframe></iframe>"); 
var scripts = '' + 
      '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js"   onload="alert(1);"><\/script>' + 
      '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js" onload="alert(2);"><\/script>'; 

iframe.html(scripts); 

jQuery("body").append(iframe); 

實施例二,更大:

function loadScript(path, callback, appendTo) { 
     var element = document.createElement('script'); 
     element.setAttribute ("type", 'text/javascript'); 
     element.setAttribute ("src", path); 

     return loadElement(element, callback, appendTo); 
} 

function loadElement(element, callback, appendTo) { 
     element.loaded = false; 

     if (element.readyState){ // IE 
       element.onreadystatechange = function(){ 
         if (element.readyState == "loaded" || element.readyState == "complete"){ 
           element.onreadystatechange = null; 

           loadElementOnLoad(element, callback); 
         } 
       }; 
     } else {     // Others 
       element.onload = function() { 
         loadElementOnLoad(element, callback); 
       }; 
     } 

     (appendTo).appendChild(element); 

     return element; 
} 

function loadElementOnLoad(element, callback) { 
     if (element.loaded != true) { 
       element.loaded = true; 
       if (callback) callback(element); 
     } 
} 


function loadScriptNew1(src, callback, appendTo) { 
     loadScript(src, callback, appendTo) 
} 

var iframe = jQuery("<iframe></iframe>"); 

loadScriptNew1("http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js", function() { 
     alert(11) 
}, iframe.get(0)) 


loadScriptNew1("http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.3/CFInstall.min.js", function() { 
     alert(22) 
}, iframe.get(0)) 

jQuery("body").append(iframe) 

的這些方式將觸發無在onload功能alert;

這可能嗎?在兩種情況下都會加載腳本,因爲它們的窗口對象已設置,但沒有回調。

回答

0

試試這個:

<html> 
<head> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 

<script type="text/javascript"> 
    function insertIframe() { 
    var iframe = $('<iframe></iframe>').appendTo('body')[0]; 

    // switch to straight JS 
    var script = iframe.contentWindow.document.createElement("script"); 
    script.type = "text/javascript"; 
    script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"; 
    script.onload = function() { alert(1); }; 
    iframe.contentWindow.document.body.appendChild(script); 

} 

</script> 
</head> 
<body onload="insertIframe()"> 
</body>