meta追加(http-equiv)
-
0 名前: 初めまして : 2007/01/17(水) 18:10 ID:TJa6xiTw
- 【何をしたいのか】
javascriptによって、ページにmeta要素を追加したい。
【現在の状況】
var Element=document.createElement('meta');
Element.http-equiv="content-type"; <=ここでエラー
Element.content="text/html; charset=euc-jp";
document.getElementsByTagName("head")[0].appendChild(Element);
【何をしてみたのか】
http-equivプロパティを設定しない場合は動作します。
どうやらhttp-equivプロパティがないか、設定できないようなのですが、
対処法・回避策をご教授いただければ幸いです。
【備考】
とりあえずWinXP SP2 IE7で動けば十分ですが、他のブラウザでも
動けば、それにこしたことはありません。
少しわき道にそれますが、
body要素は
document.getElementsByTagName("body")[0].innerHTML = hoge;
とやれば、直接テキストでいじれるのですが、
headだとこれもできません。headを直接テキストでいじる方法を
ご存知でしたら、お願いしたいです。
-
1 名前: 匿名 : 2007/01/17(水) 18:10 ID:Rt.j/.AI
- クライアント側で HTTP::Content-Type
を生成しても全く無意味だし、キーワードをロボットが拾ってくれる可能性も低いわけだが。メタ情報をクライアント側で生成する意味がよく分からないな。
まあとにかく。
> Element.http-equiv="content-type";
JavaScript の識別子にハイフン(-)は使えない。エラーが出ているだろ?
ではどうするか? DOM HTML では、属性名に対応するプロパティ名を全て定義している。置き換え法則はあるが、例外もあるので、最初のうちは逐一確認するようにしよう。
http://www2u.biglobe.ne.jp/%7Eoz-07ams/prog/dom-ref/HTML/HTMLMetaElement.html#HTMLMetaElement-httpEquiv
あるいは、この場合は setAttribute を使っても良い。
> headだとこれもできません
できるはず。
なお、JavaScript では慣習的に、大文字で始まるオブジェクト名はコンストラクタに対して使う。インスタンスは小文字で始める。まあ、あくまで慣習の話だが。
-
2 名前: 初めまして : 2007/01/17(水) 18:10 ID:TJa6xiTw
- >>匿名さん
早い回答ありがとうございます。
>>http-eqiuv
ご指摘の通り以下のようにコードを直したら動きました。ありがとうございます。
var metaElement=document.createElement('meta');
metaElement.httpEquiv="content-type";
metaElement.content="text/html; charset=euc-jp";
document.getElementsByTagName("head")[0].appendChild(metaElement);
>>document.getElementsByTagName("head")[0].innerHTML = hoge;
手元のWinXP SP2のopera9,ff2では動作しましたが、ie7では
「エラー:innerHTMLプロパティを設定できませんでした。この操作に対して無効なターゲット要素です。」
とか怒られました。まぁこちらは「できたらいいなぁ」ぐらいな勢いだったので問題ありません。
お世話になりました。
-
3 名前: 匿名 : 2007/01/17(水) 18:10 ID:Rt.j/.AI
- >>2
> document.getElementsByTagName("head")[0].innerHTML = hoge;
> ie7では
へ〜なるほど。情報感謝。
と言うか、そもそも head 要素内を全消去したらマズいんじゃないの?(HTML の文法上、title 要素は必ず 1 つだけ存在していなければならない)。+= で追記するのも駄目?
-
4 名前: 初めまして : 2007/01/17(水) 18:10 ID:TJa6xiTw
- >>+=
やーダメっぽいですねー
readはできるんだけど、writeができない。
あ、もちろん使うときはちゃんと要素を揃えてから
writeするようにしてます。+=でもダメでした。
M$のセキュリティ方針か何かでしょうか。あーあ。
-
5 名前: 匿名 : 2007/01/17(水) 18:10 ID:Rt.j/.AI
- 今試したら(←先に試せよ orz)、IE6/WinXP でも headElement.innerHTML に書き込めないね。同じエラーが出る。
MSDN の読み取り専用 innerHTML リストには、head 要素は含まれてないんだけどなあ(html、title、style 要素は含まれてる)。久しく innerHTML を使ってなかったけど、いつからだろう。昔からだっけ?覚えてないなあ……。
まあ、いいか。