質問するログイン新規登録
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

518閲覧

innerHTMLで設定したscriptが読み込まれない

ypp

総合スコア66

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2024/02/26 15:43

0

0

以下のコードでscriptタグをinnerHTMLで設定してbodyに追加すると追加はできるもののスクリプトが読み込まれません。

js

1const d = document.createElement('div'); 2d.innerHTML = `<script src="${src}"></script>`; 3document.body.append(...d.children);

[失敗例], [成功例]

innerHTMLをやめて直接scriptタグを作ってappendしたらいいじゃん!?と思われそうですが、
bodyに追加したい要素をhtmlstringで指定する関数を、

js

1function appendHTML(r) { 2 const d = document.createElement('div'); 3 d.innerHTML = r; 4 document.body.append(...d.children); 5} 6appendHTML('<script src="script.js">');

上記のような感じで作成したのですが、scriptタグをappendするとどうやら読み込んでくれないようです。

① なぜ読み込んでくれないのか?
② 上記の関数のような仕組みで読み込んでくれるようにするにはどうすればいいのか?

ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

1. なぜ読み込んでくれないのか?

【Element: innerHTML プロパティ - Web API | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Element/innerHTML#セキュリティの考慮事項

HTML5 では innerHTML で挿入された <script> タグは実行するべきではないと定義しているからです。


2.上記の関数のような仕組みで読み込んでくれるようにするにはどうすればいいのか?

「innerhtml script」 で Google 検索してみましょう。

【innerHTMLに流し込んだscriptを活性化させる | Rain or Shine】
https://www.rainorshine.asia/2017/03/02/post2722.html

【javascript - innerHTMLに入れたコードの中にscriptタグがあっても実行されないのはなぜ? - スタック・オーバーフロー】
https://ja.stackoverflow.com/questions/2756/innerhtmlに入れたコードの中にscriptタグがあっても実行されないのはなぜ

投稿2024/02/26 16:02

編集2024/02/26 16:04
kei344

総合スコア69625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ypp

2024/02/26 21:44

勝手に無効化されていたのですね。 にしても、js側で警告ぐらい出してくれればいいのに…と思いました。 問題発生から解決まで9時間かかったので。
guest

0

js

1function appendHTML(r) { 2 const d = document.createElement('div'); 3 d.innerHTML = r; 4 document.body.append(...[...d.children].map(v => v.tagName == 'SCRIPT' ? (s = document.createElement('script'), s.src = v.src, s) : v)); 5} 6appendHTML('<script src="script.js">');

で解決しました

投稿2024/02/26 16:26

ypp

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問