JavaScript Diary

広告消しスクリプト、広告消せないスクリプト [ 2001/07/27 ]
昔、鳥を使っていたのですが、消してました、広告。ここでいう広告というのはポップアップウィンドウで開くもののことですが、実をいうとスクリプトをある程度理解していれば簡単に消すことができます。実際には消すというより、開いたものを自動的に閉じるといったほうが正しいです。例えば、鳥の自動添付されるスクリプトは以下のようなものでした。
function ShowPopup(){
    var popupURL = "http://www.hoge.ne.jp/adv.html";
    var popup = window.open( popupURL, "Popup", "width=545,height=105" );
}

ShowPopup();
これを消すには同じ名前のウィンドウを開いて閉じればいいわけです。
var win = window.open( "about:blank", "Popup", "" ); // 開く
win.close(); // 閉じる
このスクリプトをどこでもいいので挿入すれば広告は消えてくれます。大事なのは open 関数の第二引数(ウィンドウの名前)です。さて、そこで鳥さんは考えました。「この広告スクリプトでは消されてしまう!」そして、挿入するスクリプトを変更しました。上のスクリプトを挿入した上で以下のようなコードも挿入したのです。
function changeOpenFunction(){
    var original_window_open = window.open ;
    function new_open_function( url, name, features, replace ){
        if( name != "Popup" ) return original_window_open( url, name, features, replace );
    }
    window.open = new_open_function ;
}

changeOpenFunction();
素晴らしいです。なんと、鳥は open 関数を書き換えてしまいました。Popup と名の付いたウィンドウは元から開けないようにしてしまったのです。上に書いた広告消しスクリプトは同じ名前のウィンドウを開いて、それを閉じるという方法のものでしたが、これを挿入された日にゃ〜お手上げです。しかも、JavaScript をあまり知らなかった当時、関数の入れ子にもびびりましたが、書き換えも出来るのか!と凄く勉強になったのを覚えています。
そして、僕もこれに追従してどうにかして消してやろうと思いました。結果、消せました。その方法のヒントは「この window オブジェクトの open 関数は書き換えられていますが、他の window オブジェクトは・・・」です。
では、無料サーバーに朗報! 自動的に消せない広告スクリプトとはどんなものでしょうか? 要は window の名前が問題になるわけです。
function showPopup(){
    var url  = "http://www.hogehoge.com/adv.html" ;
    var name = "_blank" ;
    var win  = window.open( url, name, "" );
}

showPopup();
あぁ〜こんなんで良かったのか。あっけなさ過ぎる。ウィンドウの名前にどうしても自社の名前付けたいのなら、name 部分を以下のように変更すると良いでしょう。
var name = "Corporation"+Math.floor( 100*Math.random() );
な〜んてことを書きましたが、実際には僕たちには分からない色々と難しいことがあるのでしょうね。