0

外部を呼び出すページがありますapplication.js。この外部application.jsファイルは、外部join.js(サード パーティのドメインでホストされている) を呼び出し、ページ上の特定の div 内に配置する必要があります#myGivenId

更新: 問題の説明を簡略化。

join.jsファイルは単純に文字列を返しますdocument.write('something here');something hereテキストは#myGivenId

次のコードを試してみましたが、結果がページに表示されず、ソース コードにも表示されません。

// jQuery version
$(document).ready(function() {
  return $.getScript('http://localhost:3001/ads/join.js', function(script) {
    return $('#myGivenId').html(script);
  });
});

// CoffeScript version
$(document).ready ->
  $.getScript('http://localhost:3001/ads/join.js', (script) -> $('#myGivenId').html(script))

なぜ表示されないのですか?

4

4 に答える 4

1

jQuery$.getScriptはそのようにデータを返さないので、コールバックを提供する必要があります。

$(document).ready ->
    $.getScript(script_url, (data) -> $('#myGivenId').append(data));

参照:http ://api.jquery.com/jQuery.getScript/

于 2012-11-16T08:00:41.773 に答える
0

これは、期待どおりには機能しません。document.write() は、元のスクリプトが配置された場所から本文に書き込みます。要素にはできません...代わりにdocument.write()要素を変更する必要があります。innerHTML

join.js を編集できない場合、元の外部スクリプトの位置を変更する以外に良い解決策はありません。

join.js を変更できる場合は、それを変更して DOM を直接変更します。例えば。

document.getElementById("myGivenId").innerHTML = "something here";
于 2012-11-17T02:25:03.573 に答える
0

スクリプトの「結果」が何を意味するのかわかりませんが、考えられる解決策をいくつか示します (Coffee Script を許してください。通常は JavaScript でプログラミングします)。

エクスポートされた機能

スクリプトに呼び出したい関数があると仮定すると、jQuery の .html() を使用するだけです。

$('#myChosenId').html(someFunc())

スクリプトが事前に読み込まれていることを確認する必要があります。

$.getScript(pathToScript, () -> $('#myChosenId').html(someFunc()))

これにより、スクリプトが読み込まれ、読み込まれたときに関数が呼び出されます。

評価

スクリプトが単なる式 (5 + 3または などcallSomeFunc(Math.cos(5), 7, "hello")) である場合、残念ながら唯一の解決策は を使用することevalです。これは良い解決策ではありません。可能であれば、コードをリファクタリングして関数をエクスポートすることを強くお勧めします。

$.get(pathToScript, (script) -> $('#myChosenId').html(eval(script)))

$.getうまくいけば、生のスクリプトを取得し (それが$.ajax機能しない場合は使用する必要があるかもしれません)、それをコールバックに渡します。evalスクリプトを実行し、「結果」が何であれdivに割り当てます。

あなたの質問から、これはあなたが望んでいたもののように聞こえます。の使用はお勧めしませんeval。完全を期すために提供しました。

このようなことを頻繁に行う場合は、requirejsを調べることをお勧めします。コードをきれいに構成し、外部コードを安全な方法でインポートできます。

編集:

スクリプトタグを要素に埋め込みます:

$('#myChosenId').append($('<script>').attr('src', pathToScript))

私はこれをテストしていませんが、動作するはずです。要素の下に新しい script タグを作成するだけです。これはひどいスタイルです。おそらく、そのサード パーティのサイトからデータを取得する別の方法を見つける必要があります。ルーターのファームウェアなどを操作する場合などに必要になることがあります。

于 2012-11-16T19:42:21.960 に答える
0

あなたが欠けているのはdiv、DOMに入れることです。これは簡単に修正できます。

document.body.appendChild(placement);

この行を関数の最後に置きます。

于 2012-11-16T06:21:22.563 に答える