3

我认为我可以只使用 jQuery 的 .append() 并将它们添加到头部,但这似乎不适用于我的外部脚本(Knockout.js)。

这是我在页面加载时运行的代码。它似乎适用于样式表,但不适用于外部脚本。

if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.8.0') {
    var script_tag = document.createElement('script');
    script_tag.setAttribute("type","text/javascript");
    script_tag.setAttribute("src",
        "http://code.jquery.com/jquery-1.8.0.min.js");
    if (script_tag.readyState) {
      script_tag.onreadystatechange = function () { // For old versions of IE
          if (this.readyState == 'complete' || this.readyState == 'loaded') {
              scriptLoadHandler();
          }
      };
    } else {
      script_tag.onload = scriptLoadHandler;
    }
    // Try to find the head, otherwise default to the documentElement
    (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
} else {
    // The jQuery version on the window is the one we want to use
    jQuery = window.jQuery;
    main();
}

function main() { 
        jQuery(document).ready(function($) {
            $("head").append("<script type='text/javascript' src='http://knockoutjs.com/js/jquery.tmpl.js'></script>");
            $("head").append("<script type='text/javascript' src='http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-1.2.1.js'></script>");
            $("head").append("<link href='style.css' rel='stylesheet' type='text/css' />");

            // Then it appends the necessary HTML code [...]
        });
    }

这是我的测试环境,您可以在其中看到我当前使用 Firebug 运行的代码。

这是页面加载后我在 Firebug 中看到的内容:

在此处输入图像描述

编辑:看起来我的代码中的 Knockout.js 脚本有问题,所以我会调查一下。感谢您对动态脚本的评论和回答。我学到了一些东西:)

4

4 回答 4

8

你试过 jQuery.getScript() 吗?它基本上从服务器加载一个脚本,然后执行它。

 $.getScript("yourScript.js", function(){});
于 2012-11-19T17:58:46.867 回答
1

尝试以这种方式添加脚本,我之前在某些浏览器中看到过这个问题。

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = script_url;
$("head").append( script ); 
于 2012-11-19T17:57:22.370 回答
0

根据这里的jQuery API pages 评论,这种行为是完全正常的,因为 jQuery在你清理 DOM 之后

无论您是通过$.append()ing 还是使用$.getScript().

但是,加载您的网站至少给了我三个两个可靠的错误。你可能想研究这些。

错误:

ReferenceError: $ is not defined
search.js
Line 54

TypeError: jQuery is undefined
http://knockoutjs.com/js/jquery.tmpl.js?_=1353351345859
Line 7
于 2012-11-19T18:12:22.303 回答
-1

如果您的应用程序如此复杂,您应该使用 AngularJS 之类的东西。否则你就是在重新发明轮子。

于 2012-11-19T18:32:34.830 回答