ホームページ > ウェブフロントエンド > jsチュートリアル > innerHTML で挿入されたスクリプトが常に実行されないのはなぜですか?それを修正するにはどうすればよいですか?

innerHTML で挿入されたスクリプトが常に実行されないのはなぜですか?それを修正するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-18 21:28:17
オリジナル
174 人が閲覧しました

Why Don't Scripts Inserted with innerHTML Always Execute, and How Can I Fix It?

innerHTML で挿入されたスクリプトの実行

innerHTML を使用して Web ページにスクリプトを挿入することは、スクリプトが DOM に表示される可能性があるため、難しい場合があります。実行に失敗します。これは、スクリプトがページに動的に追加されるときにブラウザがスクリプトの実行を処理する方法が異なるためです。

これを克服するには、DOM でスクリプト要素を再帰的に検索し、それらを実行可能なクローンに置き換える方法があります。ここでは、再帰スクリプト置換関数のステップごとの説明を示します。

function nodeScriptReplace(node) {
ログイン後にコピー
  • この関数は、引数としてノードを受け取り、それがスクリプト要素であるかどうかを確認します (つまり、その tagName は ' SCRIPT').
  • それがスクリプト要素の場合、同じコードを含むクローンに置き換えられます (これは、 nodeScriptClone())。
  • スクリプト要素でない場合は、ノードの子でスクリプト要素がないか再帰的に検索します。
function nodeScriptClone(node) {
ログイン後にコピー
  • この関数は、新しい元のスクリプト ノードのコードと一致するテキスト (コード) を持つ script 要素。
  • また、元のノードからすべての属性をコピーします。 「src」属性などの設定を保持するクローンです。
function nodeScriptIs(node) {
ログイン後にコピー
  • この関数は、tagName をチェックすることでノードがスクリプト要素であるかどうかを判断するヘルパーとして機能します。

使用例:

挿入されたスクリプトを実行する場合innerHTML を使用して、ドキュメントの本文 (またはその他の任意のコンテナ) でnodeScriptReplace() 関数を呼び出します。

nodeScriptReplace(document.getElementsByTagName("body")[0]);
ログイン後にコピー

この再帰的アプローチを利用することにより、検索プロセス中に検出されたすべてのスクリプト要素が次のように置き換えられます。実行可能クローン。innerHTML で挿入されたときにスクリプトが適切に実行されるようにします。

以上がinnerHTML で挿入されたスクリプトが常に実行されないのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート