0

zoom.itスクリプトを動的にロードしようとしていますが、 がないとロードできないようですdocument.write。問題document.writeは、自分のページのすべてが置き換えられることです。これは望ましくありません。他にどのような選択肢がありますか?

これはdocument.write動作中です: http://jsfiddle.net/JyT9B/6/ (削除される要素に注意してください)。

また、<script>タグを本文に直接入れることもできます: http://jsfiddle.net/gTcRw/5/ですが、動的に配置する必要があります。


また、ページにJavaScript ファイルを動的に追加する方法 および js ファイルを動的に追加および削除する方法 のメソッドも試しましたCannot set property 'innerHTML' of nullが、おそらく zoom.it 固有のものであるエラーが発生するようです。どうしてこうなったのか、知りたくてたまりません。

他のアプローチを使用する jsfiddle の例:

これも無駄に試しました: .innerHTML - dom に追加されますが、実行されません。

4

2 に答える 2

2

と の組み合わせはcreateElementappendChild次のように機能するはずです。

http://jsfiddle.net/kbDny/3/

$(function() {
    getScript("http://www.zoom.it/aaa.js");
});

function getScript(src) {
    var scr = document.createElement("script");
    scr.type = "text/javascript";
    scr.src = src;

    var head = document.getElementsByTagName("head")[0];
    head.appendChild(scr);
}

しかし、使用しない理由はありません。次のように、最初の引数として the$.getScriptを渡すだけです。url

$.getScript(url, function (data, textStatus, jqxhr) {
    // Script loaded successfully
});
于 2012-10-29T23:29:00.717 に答える
1

スクリプトタグが埋め込まれたhtmlページを含めるためにiframeを使用することになりました。

iframe の利点は、スクリプトを削除するときに現在のページ ドキュメントをクリーンアップすることを心配することなく、自由に表示/削除できることです。

つまり、

HTML

<body>
  <div id="container">
    <a id="show" href="#">show</a>
    <a id="close" href="#">close</a>

    <div id="placeholder"></div>
  </div>
</body>​

JavaScript

function appendFrame(elem) {
  var iframe = document.createElement("iframe");
  iframe.id = "iframe";
  iframe.setAttribute("src", "about:blank");
  iframe.style.width = "200px";
  iframe.style.height = "200px";
  $(elem).append(iframe);
}

function loadIFrame() {
  appendFrame($("#placeholder"));

  var doc = document.getElementById('iframe').contentWindow.document;
  doc.open();
  doc.write("<html><head><title></title></head><body><script src='http://zoom.it/aaa.js'><\/script><\/body><\/html>");
  doc.close();
};

$("#show").click(function() {
  loadIFrame();
});

$("#close").click(function() {
  $("#iframe").remove();
});​

JSFiddle ソリューションはこちら: http://jsfiddle.net/7KRcG/2/

于 2012-10-30T00:20:02.280 に答える