0

dom がロードされたときに script タグが存在するのに実行されていないのはなぜですか? このコードがあるとしましょう

History.Adapter.bind(window, 'statechange', function(e) { // Note: We are using statechange instead of popstate
        var State = History.getState();
        $('#main-content').load(State.url + " #main-content");
    });

そして、指定された URL から「 #main-content 」のコンテンツを読み込みます。指定された URL とその URL にこれが含まれている

<div id = "main-content">
<script>
$(document).ready(function(){
  console.log($('audio'));
})
</script>
</div>

コンソールに音声が表示されないのはなぜですか?

4

1 に答える 1

1

http://api.jquery.com/load/に記載されているように、この方法でロードされたスクリプトが実行されない理由がいくつかあります。

この場合、接尾辞付きのセレクター式を使用して、フェッチしたコンテンツの一部のみを現在のドキュメントに挿入しています。これの欠点は、コンテンツの一部が実際にドキュメントに挿入される前に、スクリプトがコンテンツから削除されることです。

スクリプトを除外する理由は、jQuery ロード メソッドのソース (v1.9.1) に記載されています。

// セレクターが指定されている場合は、ダミーの div で正しい要素を見つけます

// スクリプトを除外して IE の「Permission Denied」エラーを回避します

可能であれば、サーバーが「メイン コンテンツ」の div のみで応答するようにすることで、これを回避します。おそらく、最初の URL に追加するクエリ文字列によってトリガーされ、セレクターなしでロードします。

何らかの条件に応じてドキュメントの一部のみを返すことは、ドキュメントを生成するサーバー側アプリケーション (存在する場合) 次第です。たとえば、PHP を使用している場合は、スクリプトを call に変更してから、 「main-content」が等しいload(State.url + "?section=main-content")かどうかを PHP にチェックさせます。$_GET['section']その場合、更新する div を除くすべてのレンダリングをスキップします。問題のその部分については、サーバーで何を実行しているに依存するため、これ以上詳細な回答を提供することはできません。

静的ファイルを提供していて、ホストが PHP または別の言語を実行していない場合、最初にドキュメント全体を (呼び出しの #main-content一部を除いてload()) iFrame にロードしてから、更新したい部分を抽出することを他の人が推奨していると聞きました。純粋な JavaScript を使用したメイン ドキュメント。あなたの状況ではうまくいくかもしれませんが、スクリプトはおそらく 2 回実行されます。最初に、読み込まれたドキュメントのすべてのスクリプト部分が iFrame のコンテキストで実行されます。次に、抽出されたセクションのスクリプト部分が、メイン ドキュメントに挿入されると再び実行されます。

静的ファイルを提供しているが、ホストが PHP または別の言語を実行している場合、必要なドキュメントのセクションのみを抽出するための小さなスクリプトを作成できる可能性があります。このようなスクリプトは、PHP DOM に基づいてdocument の一部のみを返すことができますが、代わりに GET/query パラメーターから XHTML ファイルへのパスを取得するように変更されています。これには、以前にアクセスしたページへのパス全体がサーバーに送信されるように、ロード呼び出しを次のように変更する必要があります。load("path/to/extraction_script.php?filename=" + escape(State.url) + "&section=main-content")

注:十分に注意しない限り、外部 URL を含め、アクセスできるサーバー上の任意のファイルを読み取ることができるプロキシ サーバーを本質的に作成しているため、そのようにすると、重大なセキュリティ ホールが開く可能性があります。このアプローチはお勧めしません。実際に機能するかどうかをテストすることはできません。これは、サーバーの構成とドキュメントの外観の両方に依存します。

于 2013-02-07T02:37:42.767 に答える