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

このjQueryAPIページのコメントによると、 jQueryはユーザーの後にDOMをクリーンアップするため、この動作は完全に正常です。

$.append()コードを取得するか、を使用するかに関係なく、コードは実行されます(URLが正しく、XSSがブロックされていない場合)$.getScript()

ただし、サイトをロードすると、少なくとも3つの2つの確実なエラーが発生します。あなたはそれらに取り組みたいと思うかもしれません。

エラー:

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 に答える