読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

cssTextについて

javascript

javascriptで独自のCSSプロパティを作ったり、CSSの値に独自のものを追加できると面白いと思って、cursorプロパティの値にhaikuというものを追加するコードを書いた。
CSSを外部サイトから読みこんだ場合、CSSのcssTextなどに触れるとSecurity errorが発生するのは知っていたので(クロスドメイン制限)、同じドメインにしていたのに駄目だった。
調べたところ、cssTextは、無効な値などを除去した後の整形済みテキストになっていて、cursor:haikuの部分が丸まる削除されていた。

ということで、box-shadowをクロスブラウザ対応にするのは難しそう。

var $$ = 
  function(selector, context)
    Array.slice((context || document).querySelectorAll(selector));

Array.forEach(
  document.styleSheets,
  function(styleSheet) {
    try {
      Array.forEach(
        styleSheet.cssRules,
        function (cssRule) {
          var m = cssRule.cssText.match(/cursor\s*:\s*(.*)\s*;/);
          if (!m || m[1] != "haiku") return;
          var elems = $$(cssRule.selectorText);
          if (!elems.length) return;
          Array.forEach(
            elems,
            function(elem) {
              elem.cursor = 'url("http://h.hatena.ne.jp/favicon.ico")';
            });
        });
    } catch (e) {
      if (e instanceof DOMException) return;
      throw e;
    }
  });