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 を使ってなかったけど、いつからだろう。昔からだっけ?覚えてないなあ……。

まあ、いいか。

一覧へ戻る