2017-08-01 61 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