3

これは FF safari と chrome では機能しますが、IE8 ではエラーが発生します。

var styleText = "#" + containerElement.id + " button {background-color:" + options.bg_color + ";}";
    styleText += "#" + containerElement.id + " button.not-open {color:" + options.txt_color + ";}";
    styleText += "#" + containerElement.id + " button.not-open:hover {color:" + options.hvr_color + ";}";
    styleText += ".info_pane {background-color:" + options.bg_color + ";}";
    styleText += ".info_pane {color:" + options.txt_color + ";}";
    styleText += ".info_pane a {color:" + options.txt_color + ";}";
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = styleText;

innerHTML がエラーをスローしているものです。これを機能させるための最良の代替手段は何ですか? 私は周りを見回しましたが、私が見つけたほとんどのものは少し不安定に見えます

4

3 に答える 3

5

cssText代わりにプロパティを試してください。style.cssText = styleText;

編集:明らかに、それはstyle.styleSheet.cssText = styleText;. 私の悪い。

デモ

于 2012-11-13T21:51:53.600 に答える
1
    var styleText = "#" + containerElement.id + " button {background-color:" + options.bg_color + ";}";
    styleText += "#" + containerElement.id + " button.not-open {color:" + options.txt_color + ";}";
    styleText += "#" + containerElement.id + " button.not-open:hover {color:" + options.hvr_color + ";}";
    styleText += ".info_pane {background-color:" + options.bg_color + ";}";
    styleText += ".info_pane {color:" + options.txt_color + ";}";
    styleText += ".info_pane a {color:" + options.txt_color + ";}";
    var style = document.createElement('style');
    style.type = 'text/css';
    if(style.styleSheet) { //IE
        style.styleSheet.cssText = styleText;
        document.getElementsByTagName('head')[0].appendChild(style);
    } else {
        style.innerHTML = styleText;
        document.getElementsByTagName('head')[0].appendChild(style);
    }

これは私が行かなければならなかったものです。どこで見つけたのか正確には覚えていませんが、機能します。

于 2012-11-14T01:07:14.223 に答える
0

解決策を見つけてよかったです...興味があるだけで、次のいずれかを試してみるとどうなりますか?

style.innerText = styleText;
style.insertAdjacentText('beforeEnd', styleText);
style.insertAdjacentHTML('beforeEnd', styleText);
style.replaceAdjacentText('beforeEnd', styleText);

現時点では、IE8 ユーザー エージェントにアクセスしてテストすることができず、熟考していました。msdn によると、innerHTMLinsertAdjacentHTMLもStyle要素でサポートされていません(かなりばかげています) ...ただし、 replaceAdjacentText はサポートしていますか?? いつものように古き良きIE。

別のフォールバック-アイデアのためだけに-を使用することだと思います:

var head = document.getElementsByTagName('head')[0];
    head.insertAdjacentHTML('<style>'+styleText+'</style>');
于 2012-11-14T01:39:39.367 に答える