我有一个我无法编辑的静态html页面 - 它确实引用了一个js文件,所以我所做的是将我的IIS服务器上的url请求重定向到我的js文件 - 我动态注入jQuery所以我可以使用它。这是我用来插入jQuery的代码:
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();
}
};
除了一个特定的情况外,这很有效 - 如果我在浏览器是IE并且从内部Web服务器提供页面时在页面上调用history.go()。点击F5也不会正确重新加载页面。我必须将光标放在地址栏中并按Enter键以使其正确加载。
编辑:忘了提及显而易见的 - 我在jqueryReady()函数中有一个断点 - 它永远不会被击中 - 这就是问题所在......
如果我提供页面然后触发history.go()(点击按钮),它在我的开发环境中从IE工作正常。它适用于chrome,还没有测试过firefox。
那么有没有一种替代历史.go()来触发'真正的'页面重新加载,就像在地址栏中输入一样?
这也是一个巨大的页面 - 6000行的HTML(我没有写它)和jQuery和所有的javascript正在加载 - 我知道你应该在页面的末尾加载js的东西。也许这是相关的?感觉就像一个时间问题......
任何人都有任何关于要检查/尝试的事情的想法?或者知道发生了什么?
答案 0 :(得分:1)
好的找到了......所以解决方案是here
底线是我使用的代码不正确,这是将脚本动态插入文档然后处理ready事件的推荐方法:
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()
}
}
这似乎适用于我能找到的所有情况。
希望这有助于其他人!