Check

IE6でstyle elementの中身をいじれない

| | コメント(2) | トラックバック(0)
var style = document.createElement('style');
style.appendChild(document.createTextNode('a img{ border : none }'));

とかするとエラーになる。
(styleをdocument.getElementsByTagName('head')[0].appendChildした後でもエラーになる)

styleのinnerHTMLもだめ。
(「予期しないメソッドの呼び出し、またはプロパティ アクセスです」とか言われる)

var style = document.createTextNode(([
    '<style type="text/css">',
        'a img { border : none };',
    '</style>'
]).join(''));
document.getElementsByTagName('head')[0].appendChild(style);

で解決

//----------------------------

してなかった。これじゃheadにtext書いてるだけなので有効にならない。

var div = $d.createElement('div');
div.innerHTML = ([
    'div<div><style type="text/css">',
        'a img { border : none };',
    '</style></div>'
]).join('');
var head = $d.getElementsByTagName('head')[0];
head.appendChild(div.getElementsByTagName('style')[0]);

これで解決。'div<div>'この辺の指定にびびる。

トラックバック(0)

このブログ記事を参照しているブログ一覧: IE6でstyle elementの中身をいじれない

このブログ記事に対するトラックバックURL: http://0-9.sakura.ne.jp/mt/mt-tb.cgi/675

コメント(2)

有用な情報をありがとうございます。ちょうどこの症状に出くわし、解決法を探してこちらのページにたどりつきました。

試してみたところ、手元の環境では、

> '<style type="text/css">',
> 'a img { border : none };',
> '</style>'

のような記述では駄目でしたが、

> 'dummy <style type="text/css">',
> 'a img { border : none };',
> '</style>'

のように、'<style ~>' の前にダミーのテキストを何か入れればOKでした。Windows XP上のIE8とIE6(IE8での互換表示)で確認しました。
それにしてもなぜこんな仕様(実装)になっているのか、なんとも不思議です。

以上、お礼のついでにご報告まで。

ご報告ありがとうございます。
なんというか、仕様というよりバグなんじゃないかって気がしますね。

コメントする