2010年4月16日金曜日

便利で危険なonLoad()

技術を書くはずがあらぬ方向に進んでいる当ブログ。
軌道修正も兼ねて技術ネタを一つ。

JavaScriptは何らかの動作(イベント)で処理を始めます。
一般的なものとして
 onClick():ボタンなどをクリックした時
 onMouseOver():マウスカーソルが乗った時
 onKeyDown():キーが押された時
などがあります。
今回のonLoad()もその一つです。
読んで字のごとく、画面を読み込んだ(ロードした)時に処理を行います。

よく目にするのが、画面読み込み時に見た目が勝手に変化するページ。
こういうページのソースをみると、<body …… onLoad="***" >と書いてあると思います。
画面読み込み時に "***" という処理で見た目の変更を行っているわけです。
ページを作る側にとってはずいぶんと便利なイベントなのですが……
便利であるがゆえに悪用も容易です。

怪しげなサイトに良くある仕掛けですが、ページを開くと勝手にウィンドウが立ち上がる。
そして、次々と新しいウィンドウが出来てきてしまってパニックになる…
身に覚えのあるあなた、怪しいサイトの利用はほどほどに^^;

このような仕掛けはonLoad()で簡単に実現できます。
具体的には、
 1、onLoad()で新しいウィンドウを開く
 2、新しいウィンドウに今開いているページを表示させる
これだけです。
ページを読み込むと、新しいウィンドウが開く⇒新しいウィンドウでページを読み込むと、新しいウィンドウ’が開く⇒新しいウィンドウ’でページを読み込むと…(以下略
ですね。

実物を用意しようと思ったのですが、開いたせいでOSがフリーズしたなどの被害が出るといけないので自重。
便利で危険なわけですが、道具は使いようということですね。

2 件のコメント:

  1. 無限Windowの仕掛けをやめたとありますが、
    どこかを操作(操作箇所は不明)ですが
    無限Windowの被害に遭いました。
    全て保存されている状態での再起動措置で復旧
    しましたので、被害は少なかったですが。

    作ろうと試みた時の残骸ではないかと思われます。
    新たな被害者が出る前に該当ソースを探して
    削除されたほうが賢明かと思います。

    返信削除
  2. 筆者です。
    ご指摘ありがとうございます。

    しかしながら、onLoad()で新しいウィンドウを開く処理は、このブログには一切組み込んでおりませんし、組み込もうと試みてもおりません。構想段階で自重しました。説明不足で誤解を招いたとしたら申し訳ないと思います。

    尚、ブログのソースは手を入れるのが難しく、かつ、大手が提供しているお手軽に使えるブログ(アメーバ・Googleその他いろいろありますが)はそのような危険なコードを認めないように作られているのがほとんどです。

    仮に無限Windowを作る場合、無限Windowのページへのリンクを張る形になりますが… そのようなリンクは張っておりません。
    Googleアドセンス(広告)については自動でリンク先が変わるため完全な保証はできません。経験上、大丈夫だと判断して
    アドセンスを設置しております。

    操作個所がこのブログの何処であるかを指摘していただければ調査も可能ですが、操作個所不明かつ当ブログに一切onLoad()での新規ウィンドウ作成をしていない(試みてもいない)状態では残骸の調査は不可能と返答せざるをえません。

    返信削除