4

Web ページを外部システムと統合する JavaScript を作成しようとしています。現在、私が持っているのは、スクリプト要素をページに動的に挿入する非常に少量のコードです。

$(document).ready(function() {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://example.com/example.php?arg1=1&arg2=2";
    document.body.appendChild(script);
});

外部システムから返される JS は、テーブルをページに書き込む 1 行の大きな document.write 呼び出しです。

document.write('<table><tr><td>blah</td></tr></table>');

このスクリプト要素をページに挿入すると、DOM インスペクタを使用して確認できますが、スクリプトが実行されていないように見えます。スクリプト要素を HTML に手動で配置すると、javascript は問題なく実行されます (したがって、同じオリジン ポリシーや不正な形式の html エラーではありません...) が、動的にしたいと考えています。

JavaScript が実行されない理由はありますか?

4

6 に答える 6

2

DOM の準備が整った後に使用document.writeすると、ページのコンテンツが、作成中のものに置き換えられます。

ページに何かを挿入したい場合は、実際の DOM 操作方法の 1 つを使用することをお勧めします。

スクリプトが実行されていない限り、それが正しく接続されていると確信していますか? これが事実であることを確認するために、含まれているスクリプトに JavaScript ブレークポイントを設定しようとしましたか?

于 2012-08-22T12:25:07.100 に答える
1

このコードを使用してみてください(分析やFacebookでのGoogleの使用と同じです)。

あなたのページの一番下にそれを置いてください;)

<script type="text/javascript">
    (function() {
        var script = document.createElement('script'); 
            script.type = 'text/javascript'; 
            script.async = true;
        script.src = '/example.php?arg1=1&arg2=2';
        var s = document.getElementsByTagName('script')[0]; 
            s.parentNode.insertBefore(script, s);
    })();
</script>

または、davidbuzattoが示唆しているように、省略形の$ .ajax()関数である$ .getScript()を使用する必要があります。

$(document).ready(function() {
    $.getScript("/example.php?arg1=1&arg2=2", function(data, textStatus, jqxhr) {
        console.log(data); //data returned
        console.log(textStatus); //success
        console.log(jqxhr.status); //200
        console.log('Load was performed.');
   });
});

編集: おそらくクロスドメインの制限があるようです。インクルードの完全なURLの代わりに、相対URL"/example.php?arg1=1&arg2=2"を使用してみてください。または、同じWebサーバーでない場合は、cross-domain.xmlファイルを使用します。

于 2012-08-22T12:53:25.777 に答える
1

実行するのではなく、それを含めるだけだからです。jQueryを使用しているので、$.getScript()関数を見てください。

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

それはあなたのニーズに合うでしょう。この関数は Ajax 関数であり、その動作は非同期であるため注意してください。そのコールバックを使用して、ロードされたスクリプトに基づくコードを実行します。

編集: Felix はスクリプトの実行について私に訂正してくれましたが、それでも機能を試してみてもよいと思います。

于 2012-08-22T12:24:09.480 に答える
0

JSを別のウィンドウ/iframeに貼り付けて、テーブルを正しく実行および表示し、AJAXを使用してそのテーブルをそのページにプルしないのはなぜですか?

JQuery AJAX は、IMO を使用するのが最も簡単です。

http://api.jquery.com/jQuery.ajax/

于 2012-08-22T12:41:24.877 に答える
0

私はいつもこれが次のように行われるのを見てきました:

document.write('<scr' + 'ipt>---scripthere---' + '</scr' + 'ipt>');

似たような理由からだと思います。「実際の」スクリプト要素を作成する代わりに、それを試してください。

于 2012-08-22T12:45:52.060 に答える
0

それを達成するにはJSONPを使用し、コールバック関数を使用してbodyタグに追加する必要があると思います

$(document).ready(function() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://example.com/example.php?arg1=1&arg2=2&callback=showit(data)";
document.body.appendChild(script);
});

 function showit(data){document.write(data);}
于 2012-08-22T12:30:10.163 に答える