Google Chrome または Safari を使用される事を強くお薦めしますw
他のブラウザでは Javascript の処理が重いです(汗)


2010/12/28

外部JSの読み込みと実行

ここへきてようやくリドルの話題ですww
リドルっつーのは同じようなページを何枚も作るので、基本1つ作ってコピペして変更してということをするわけですが、ページごとに違うスクリプトで処理したい場合に、

1ページ目が <script type="text/javascript" src="hoge.js"></script>
2ページ目が <script type="text/javascript" src="piyo.js"></script>

だったりすると、あ、なんか前のページと違うことしてるーとバレやすい気がしないでもありません。

どっちみちソースおっかけられたら防ぎようはないんですが、ちょっとでも分かりにくくするために js を動的に読み込んで実行するというのを「赤と黒」や「Overheated 2」でやってたんですが、それをマイナーチェンジしたバージョンを紹介します。

ぶっちゃけのソースはこうです。
if( document.body.className ) {
    var fn = document.body.className;
    var sc = document.createElement('script');
    sc.type = 'text/javascript';
    if( document.all ) {
        var bDone = false;
        sc.onreadystatechange = function(){
            if( sc.readyState == 'complete' || sc.readyState == 'loaded'  ) {
                if( !bDone ) {
                    bDone = true;
                    window[fn]();
                }              
            }
        }
    }
}
else {
    sc.onload = function(){
        window[fn]();
    }
}

sc.src = fn+'.js';
document.body.appendChild(sc);
HTML の方には <body class="hoge"> と書いておきます。
これで hoge.js が読み込まれ、関数 hoge() が実行されます。
簡単のためにファイル名と関数名(エントリーポイント)を同じ名前にしています。body の class に設定するのはヤダって人はどっかの要素の class や id や name を読み取るように変更してください。
スクリプトの方も IE の判定に document.all かよ、とかツッコミどころあるかとは思います^^;

IE 以外であれば該当するファイルが無かったら onerror でキャッチすることができます。が、IE ではそれができません。もしできたらリドルの答えを js のファイル名にしてページ遷移のないリドルなんかも作れるんですけどね (Dragon's eye でやろうとして挫折しましたw)。

まあこんなことしても Firebug なんかで見られたら <script> タグが挿入されていることはバレバレではございます。


スクリプトそのものを暗号化してしまうって手も考えられます。
(↓擬似コードです)
var scrumbledSource = "WWWWWWWWwwwwwwwwwwWWWWWWWWwwWWwwww...(ずっと続く)...wwWWWWWWWWWWWw";
eval( decodeScrumbledSource(scrumbledSource) );
みたいな感じで。
decode するルーチンは丸見えなんで解読する気になればできちゃいますけど。

0 件のコメント:

コメントを投稿