JavaScript



2010 7月1日

IEの6,7,8を判別するJavascript
JavaScriptでIEかどうかをたったの1行で判別する方法

この両者のスクリプトを合わせてみた。
ライブラリを使いたくない(or使えない)状況で役に立つかも。
ちなみに「IEの6,7,8を判別するJavascript」のコードは間違っていたので少々修正。

if (typeof document.body.style.maxHeight != "undefined") {
    if (!/*@cc_on!@*/false){
        // Not IE.
        alert('Not IE.');
    }else if (document.documentMode >=8) {
        // IE8
        alert('IE8');
    }else {
        //IE7, IE8(IE7 mode)
        alert('IE7, IE8(IE7 mode)');
    }
} else {
    // IE6, older browsers
    alert(' IE6, older browsers');
}

Windows XP の IE8、IE7、FireFox、Chromeで確認OK.
Mac の Safari、FireFox、Opera、Chrome でもOK.







2010 7月1日

相変わらずクソな実装のIE。
他のブラウザで全部動くのにIE 7.0 以下の挙動はホントにクソ。
先人の方々に感謝感激雨あられですわ。

IEでのgetAttribute,setAttributeのバグ

// NG
element.getAttribute("class");
element.setAttribute("style", "background-color: #fff; color: #000;");
element.setAttribute("onclick", "clickHandler(event);");

// OK
element.getAttribute("className");
element.style.cssText = "background-color: #fff; color: #000;";
element.setAttribute("onclick", new Function("clickHandler(event);"));

IEでsetAttribute()とremoveAttribute()がうまく動かない問題 (ウップス!!なかわけ)

しかも、かなり重要なことを発見しました。

属性名を小文字で書かないとうまく動かない!!(IE7で確認)

setAttribute("onClick", new Function(""));

ではダメなのです。うまく処理されません。

setAttribute("onclick", new Function(""));

あー、これも引っかかってたわ。

ただし、上記の対応をすると他のブラウザで動かない。IE8 でもエラーが出る。IE 7以下用に振り分けないとダメなのか。。。

まぁ、そろそろIE7以下は捨ててもいいよ・・・ね?

結局

ベタにHTMLを document.write() で書けばいい訳で・・。
クロスブラウザにするには手間ががかかる・・。







2010 5月20日

自動でSSLページへ移動させるJavaScript

ログインページ等でSSLのみのアクセスにしたいページがある場合、リンクをhttpsから始まるURL にしなくてはならないのでちょっと面倒。

仮想パス(../aaa/bbb/ccc.html)やフルパス(/aaa/bbb.html)で既にサイトを公開している場合には、どこかしらで修正を見逃す場合もある。

それならhttp でアクセスされた場合はhttps へ移動させればよさそう。
head内とかに以下のJavascript を設置するだけでOK.

<script><!-- change ssl protocol
  if (document.location.protocol==="http:")
  {location.replace('https://'+window.location.host+window.location.pathname);}
//--></script>

今までのパスを変更しないで済むので多少楽・・・かな。