2016-08-14 321 views
0

我正试图在不同的选项卡上创建一个高图。但林得到错误,高图未定义。我试图用不同的方法注册Highchart.js。代码如下。为document.createElement('script')设置'src'属性?

function OpenWin() { 
    var w = window.open(); 
    w.document.open(); 
    w.document.write('<div id="container" style="width:100%; height:400px;"></div>'); 

    var scriptHead = w.document.createElement("SCRIPT"); 
    //scriptHead.setAttribute('src','http://code.highcharts.com/highcharts.js'); 
    var link = "http://code.highcharts.com/highcharts.js"; 
    scriptHead.src = link; 
    w.document.head.appendChild(scriptHead); 

    var script = w.document.createElement("SCRIPT"); 
    w.document.body.appendChild(script); 
    var js = w.document.createTextNode('var a = localStorage.getItem("ImportOptions"); console.log(JSON.parse(a)); var chart = new Highcharts.Chart(JSON.parse(a))'); 
    script.appendChild(js); 
    w.document.close();  
} 
+0

您应该使用脚本加载事件来定义使用它的逻辑。我猜是你添加它的方式,'scriptHead'是异步的。因此,尝试在'scriptHead.onload = function(){var script = w.document.createElement(“SCRIPT”)中设置以下逻辑: /*...*/};' –

回答

4

您需要等待以前的脚本加载。 Demo

function OpenWin() { 
    var w = window.open(); 
    w.document.open(); 
    w.document.write('<div id="container" style="width:100%; height:400px;"></div>'); 

    var scriptHead = w.document.createElement("SCRIPT"); 
    //scriptHead.setAttribute('src','http://code.highcharts.com/highcharts.js'); 
    var link = "http://code.highcharts.com/highcharts.js"; 

    // bind on script load event 
    scriptHead.onload = function() { 
     var script = w.document.createElement("SCRIPT"); 
     w.document.body.appendChild(script); 
     var js = w.document.createTextNode('var a = localStorage.getItem("ImportOptions"); console.log(JSON.parse(a)); var chart = new Highcharts.Chart(JSON.parse(a))'); 
     script.appendChild(js); 
     w.document.close();   
    } 

    // as A.Wolff mentioned you might need to set onload befor src for some browsers. 
    scriptHead.src = link; 
    w.document.head.appendChild(scriptHead); 
} 
+0

雅但我会在定义'scriptHead.onload'后设置'scriptHead.src'。如果我是正确的,在一些(较老的?)浏览器上,如果脚本缓存了,否则load事件不会被触发。 –

+0

@ A.Wolff还没有听说过这样的行为。 :)但是,以防万一... –

+0

@YuryTarabanko这工作。非常感谢:D – MaazKhan47