如何从新的 window 访问 jQuery?

How do I access jQuery from a new window?

在我的应用程序中,我用 var w = window.open() 打开了一个新的 window。我通过以下方式访问 CanvasJS API:

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);

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

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

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