2013-03-01 88 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() 
    } 
} 

这似乎工作在我能找到的所有情况下。

希望这可以帮助别人!