1

我有一个我无法编辑的静态 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 也不会正确重新加载页面。我必须将光标放在地址栏中并按回车键才能正确加载。

编辑:忘了提到显而易见的 - 我在 jqueryReady() 函数中有一个断点 - 它永远不会被击中 - 这就是问题所在......

如果我向上提供页面然后触发 history.go() (单击按钮),它在我的开发环境中的 IE 工作正常。它适用于chrome,尚未测试Firefox。

那么是否有替代 history.go() 来触发“真实”页面重新加载的方法,就像在地址栏中点击输入一样?

这也是一个巨大的页面——6000 行 html(不是我写的)和 jQuery 以及所有的 javascript 都加载在头部——我知道你应该在页面末尾加载 js 内容。也许这是相关的?感觉是时间问题。。。

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

4

1 回答 1

1

好的,找到了...所以解决方案就在这里

底线是我使用的代码不正确,这是将脚本动态插入文档然后处理就绪事件的推荐方法:

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 );

此外,我需要检查我的 jqueryReady 函数中是否加载了 jQuery:

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

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

希望这对其他人有帮助!

于 2013-03-01T18:42:02.363 回答