hagino3000's blog

平成アーカイブス (更新停止)

IE専用技のdocument.createStyleSheetは使いすぎると駄目らしい

IEでのみ使えるdocument.createStyleSheetですが、使いまくるとJavaScriptエラー「この操作を完了するのに十分な記憶域がありません」が発生します。DOM操作で変更できない所(htmlに対する指定等、下の検証コードがそうなっています)のStyleもいじれるので大変便利なんですが、使う時は注意が必要。

検証コード

<html>
 <head>
  <title>js create css test</title>
  <script type="text/javascript">
    var count = 0;
    var test = function(){
        try{
            (function(){
                document.createStyleSheet("javascript:'html, body{overflow-x:hidden;}'");
                count++;
                arguments.callee();
            })();
        } catch(e){
            alert('Count:' + count + '\n' + e.message);
        }
    } 
  </script>
 </head>
 <body>
  <input type="button" value="start!" onclick="test();" />
 </body>
</html>

結果

32回目でエラーになります。

対応方法を調べてみた

英語版のメッセージをid:akihiroxに教えてもらったのでググってみたら解決方法が。


try {
doc.createStyleSheet(css_file)
} catch(e) {}


TinyMCE Forum / createStyleSheet causes Javascript error "Not enough storage..."

こんなんでいいのかよwwwww