2

ページのクリック イベントに基づいて、ajax を介して html とスクリプトのブロックをフェッチし、スクリプト要素を取得して head 要素に追加することができますが、WebKit ベースのブラウザはそれをスクリプトとして扱いません (つまり、I追加されたスクリプトで宣言された関数を呼び出すことはできません)。

Chrome 開発者ツールを使用すると、スクリプト ノードが実際にそこにあることがわかりますが、動的に追加されていないスクリプト ブロックとは異なって表示されます。非動的スクリプトにはテキストの子要素があり、複製する方法がわかりません。これは動的スクリプト用です。

これを行うためのアイデアやより良い方法はありますか?その原動力は、ユーザーが特定のタブをクリックしない限り必要とされない HTML とスクリプトが大量に存在する可能性があることです。その場合、関連するコンテンツ (およびスクリプト) が読み込まれます。ありがとう!

4

3 に答える 3

2

jQuery を使用してみてください....getScriptというメソッドが提供され、JavaScript を適切な方法で動的にロードします。また、よく知られているすべてのブラウザで問題なく動作します。

于 2010-06-10T13:01:12.373 に答える
1

eval()サーバーから受け取ったコンテンツを呼び出すのはどうですか? もちろん、<script>との</script>部分を切り取る必要があります。

于 2010-06-10T13:03:05.210 に答える
0

jQuery のようなライブラリを使用している場合は、これを行うための組み込みメソッドを使用してください。

それ以外の場合は、次のように head ではなくドキュメントに追加する必要があります。

document.write("<scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></scr" + "ipt>");

正直なところ、スクリプト タグがそのようにカットされている理由はわかりませんが、多くの例でそのようにカットされているため、おそらく正当な理由があります。

また、スクリプトの読み込みにはかなりの時間がかかる可能性があるという事実を考慮する必要があるため、これを本文に追加した後、スクリプトが読み込まれたかどうかを確認するタイマーを設定する必要があります。これは、スクリプトがエクスポートするグローバル変数の単純な typeof チェックで実現できます。

または、実際の JavaScript 本体で eval() を実行することもできますが、いくつかの注意事項がある場合があります。

ただし、一般的に言えば、この種のことはブラウザのキャッシュに任せ、タブが表示されているページに JavaScript をロードするだけです。onload イベントを使用しないようにしてください。タブが表示されたときに必要な初期化子を呼び出してください。

于 2010-06-10T13:12:02.353 に答える