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

この日記は私的なものであり、所属会社の見解ではありません。 GitHub: takahashikzn

Strict Modeを検知する

Javascript

IE10 for Windows7がリリースされました。
で、早速検証してみたわけですが、stacktrace.js


『strict モードでは、関数または arguments オブジェクトの 'caller' プロパティを使用できません』


と怒られる(時がある)ことが判明。stacktrace.jsの内部では、"use strict"とは一言も書いてないのに。
しかも、ChromeFirefoxでは発生しないんですよねぇ…
もしかして、IE10では、strictモードが外部のスクリプトファイルへ継承されるのかもしれません。いや、ちゃんと調べてないけども。


さて、とりあえずこの問題を回避するために、strictモードの場合はstacktrace.jsを使わないコードを書こうと思いました。
strictモードかどうかの判定はどのようにやるべきでしょうか?


答えは

var strictMode = (function() {
    try {
        arguments.caller != null;
        return false;
    } catch (e) {
        return true;
    }
})();

です。他にも有るかもしれませんが、僕はコレで。