2013-03-01 126 views
1

我有一個靜態html頁面,我不能編輯 - 它確實引用了一個js文件,所以我做的是將我的IIS服務器上的url請求重定向到我的js文件 - 我在哪裏動態注入jQuery,所以我可以使用它。下面是我用插入的jQuery代碼:動態腳本不加載在history.go()

var script = document.createElement('script'); 
script.src = 'http://code.jquery.com/jquery-1.9.1.js'; 
script.type = 'text/javascript'; 
script.onload = jqueryReady;    //most browsers 
script.onreadystatechange = function() { //ie 
    if (this.readyState == 'complete') { 
     jqueryReady(); 
    } 
}; 

這只是在一個特定病例的偉大工程,如果我叫history.go()在頁面上時,瀏覽器是IE和頁面被從擔任了內部網絡服務器。點擊F5也不會正確地重新加載頁面。我必須把光標放在地址欄中,然後按回車讓它正確加載。

編輯:忘了提obvious-我在jqueryReady()函數 - 一個斷點,它從來沒有得到hit-這是問題所在......

它工作正常,從IE瀏覽器在我的dev環境,如果我提供頁面,然後觸發history.go()(點擊按鈕)。它適用於Chrome,沒有測試過Firefox。

那麼是否有另外一個history.go()來觸發一個'真正'的頁面重新加載,如點擊地址欄中輸入?

這也是一個巨大的頁面 - 6000行的HTML(我沒有寫它)和jQuery和所有的JavaScript被加載在頭 - 我知道你應該加載js的東西在頁面的末尾。也許這是相關的?這感覺就像是一個時間問題...

任何人有任何想檢查/嘗試的東西?或知道發生了什麼?

回答

1

好吧發現它...這樣的解決方案是here

底線是,我所用的代碼是不正確的,這是推薦的方法,以動態插入腳本插入到文檔中,然後處理就緒事件:

var script = document.createElement("script"); 
script.src = "/reporter/scripts/jquery-1.9.1.min.js"; 
if (script.addEventListener) { 
    script.addEventListener("load", jqueryReady, false); 
} 
else if (script.readyState) { 
    script.onreadystatechange = jqueryReady; 
} 
document.getElementsByTagName('head')[0].appendChild(script); 

此外,我需要檢查,如果jQuery的是在我jqueryReady功能加載:

function jqueryReady() { 
    // Check if jQuery exists 
    if (typeof jQuery != 'undefined') { 
     // do stuff like $(document).ready() 
    } 
} 

這似乎工作在我能找到的所有情況下。

希望這可以幫助別人!