2017-08-01 30 views
1

在我的应用程序,我打开一个新窗口var w = window.open()。我访问CanvasJS API与:如何从新窗口访问jQuery?

var canvas = w.document.createElement('script'); 

canvas.type = "text/javascript"; 
canvas.src = "https://canvasjs.com/assets/script/canvasjs.min.js"; 

w.document.head.appendChild(canvas); 

这工作得很好。我与jQuery的同样的事情,并确保我自己的脚本之前将其追加但我得到这个错误:ReferenceError: $ is not defined

这里是我的代码如下所示:

var w = window.open('','_blank',width,height); 

w.document.body.innerHTML = '<body> //create chart container here </body>'; 

var jQuery = w.document.createElement('script'); 
var canvas = w.document.createElement('script'); 
var script = w.document.createElement('script'); 

canvas.type = "text/javascript"; 
canvas.src = "https://canvasjs.com/assets/script/canvasjs.min.js"; 

jQuery.type = "text/javascript"; 
jQuery.src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"; 

script.textContent = "//my script content here, this is where I use the '$' jQuery object"; 

w.document.head.appendChild(jQuery); 
w.document.head.appendChild(canvas); 
w.document.head.appendChild(script); 
+0

动态添加的脚本异步加载,并且完成的加载顺序不同。 – Teemu

回答

0

即使您已插入脚本标记在头部,但这并不意味着脚本已完全下载。您的代码在浏览器能够下载jQuery之前运行。动态插入的脚本标签执行异步操作。

我建议你设置一个间隔并检查jQuery是否可用。一旦可用,执行你的代码。将为jQuery创建的脚本元素命名为其他名称,因为它会干扰在您的时间间隔内检查jQuery。

var jqueryCheck = setInterval(function() { 
    if(window.jQuery) { 
     clearInterval(jqueryCheck); 
     // execute your code 
    } 
}, 100); 
+0

就是这样!谢谢,我会尽可能标记你的答案。 – freedom666