动态脚本未在history.go()上加载

时间:2013-03-01 17:15:29

标签: javascript jquery browser-history

我有一个我无法编辑的静态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的东西。也许这是相关的?感觉就像一个时间问题......

任何人都有任何关于要检查/尝试的事情的想法?或者知道发生了什么?

1 个答案:

答案 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()
    }
}

这似乎适用于我能找到的所有情况。

希望这有助于其他人!

相关问题