質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

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

Q&A

解決済

2回答

1821閲覧

scriptタグに動的に属性を追加する

pegy

総合スコア243

JavaScript

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

0グッド

1クリップ

投稿2020/09/25 04:40

GoogleMapが人によって、エッジやIEで表示されない問題が生じたため、試しにscriptタグの最後にdeferを追加して読み込みを調整しようと考えております。
script.setAttribute = "defer"//ここ
のように動的に追加しようとしているのですが、反映されません。
特に(name,value)の組み合わせではないようなdeferやansyncの属性の追加がわからなかったのですが、アドバイスを頂けると幸いです。

Javascript

1 function load(src) { 2 var head = document.getElementsByTagName('head')[0]; 3 var script = document.createElement('script'); 4 script.type = 'text/javascript'; 5 script.src = src; 6 script.setAttribute = "defer"//ここ 7 head.appendChild(script); 8 } 9 10 function loadGMap() { 11 var nativeWrite = document.write; 12 document.write = function (html) { 13 var m = html.match(/script.+src="([^"]+)"/); 14 if (m) { 15 load(m[1]); 16 } else { 17 nativeWrite(html); 18 } 19 };

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

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

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

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

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

guest

回答2

0

ベストアンサー

実際に確認していませんが、

javascript

1script.setAttribute("defer", "defer");

じゃないでしょうか。

投稿2020/09/25 04:49

KoichiSugiyama

総合スコア3041

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

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

pegy

2020/09/25 04:58

ご回答ありがとうございます、付与することができました。 といってもGoogleMap自体は私のPCではIEで表示されず、エッジで表示され、となりのパソコンでは逆の現象が起きているので、ちょっと考えて解決しない場合には別の質問をしてみようと思います。 助かりました。
guest

0

scriptタグ自体の出力を動的にした方が良いかと思いますが()、JavaScriptで操作するより、サーバーサイドの言語(PHPなど)でブラウザ判定して出力制御した方が確実かと思います。

投稿2020/09/25 04:44

m.ts10806

総合スコア80850

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

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

pegy

2020/09/25 04:47

ご回答ありがとうございます。 残念ながら、一種のウェブサービスのようなものを利用しており、こちらからはサーバーサイドを触ることができず、JavascriptによるAPIだけ提供されている状況でございます。 script.setAttributeのような形では属性を追加することはできないのでしょうか?
m.ts10806

2020/09/25 04:48

回答前半に分かりづらいですが「例」にリンクしてます。
m.ts10806

2020/09/25 04:49

結局のところ実行されるのはscriptタグを読み込んだときなので、読み込んだ後に属性つけても効果はない・・・というのが、「今回動いてない原因」です。 なので、「scriptタグ自体を別の形で生成して画面出力する」方法をとります。
m.ts10806

2020/09/25 04:50

と思ったらcreateElement→appendChildしてましたね。失礼。
m.ts10806

2020/09/25 04:51

あくまで、deferも属性なので。
pegy

2020/09/25 04:52

ありがとうございます。拝見はしたのですが、iframe.setAttribute("style", "display:none");のように(name,value)のような組み合わせであればわかるのですが、単純に<script defer></script>のように付け加えたいケースは言及がないように思えました。もう一度見ますが、見落としがあれば申し訳ございません。
pegy

2020/09/25 04:57

別回答を拝見しました、ありがとうございます!
m.ts10806

2020/09/28 22:14 編集

初期値がある属性は属性値書かなくても効果はでます。 例:disabled / readonly / selected など。 処理上はdisabled="disabled"として扱われるはずです。
m.ts10806

2020/09/25 05:28 編集

ちなみにinput のtypeは初期値textなのでtextにしたいだけのときはtype属性すら不要となりました。(JavaScriptで操作したい場合は注意が必要)
m.ts10806

2020/09/28 22:26 編集

修正はしました。 が、指摘ではなく単なる暴言ですし、 そのためだけにユーザー作る方がおかしい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問