A Better Project@はてなダイアリー(インポート版)

基本的にここは更新されません。詳細はaboutへ。

Opera の window.onunload の挙動

ソースだけおいておきます。詳しい更新は夜に。
同日 22:30頃 説明を追加。
JavaScript如きとどうして格闘しなきゃいけないんだ! - 血統の森+はてな で 書かれている駄文にゅうすのフォントサイズ切り替えスクリプトOpera で動かない件ですが、以下のように修正すれば動きます。

function setActiveStyleSheet(title) {
 var i, a, main;
 for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
   if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
     a.disabled = true;
   if(a.getAttribute("title") == title) a.disabled = false;
   }
 }
 createCookie("style", title, 365); //追加部分
}
//window.onunload の処理は削除。

2007-08-03 追記:デモページ。駄文にゅうすさんにメールするときに、あった方が良いなと思って、作成したもの。いちおうこっちからもリンクしておきます。あと、念のために書いておくと、このスクリプトは、application/xhtml+xml では動かないので、上記リンク先は、text/html です。application/xhtml+xml でも動くスクリプトは、CSS切替スクリプト - 徒委記 にあります。

以下、技術メモ

上記のスクリプトは元々、window.onunload 時に Cookie を発行することによって、訪問者が指定したフォントサイズを保存し、次回訪問時も、同じフォントサイズでページを表示するというスクリプトです(詳しく参照したい人は:Alternative Style: Working With Alternate Style Sheets · An A List Apart Articleへ)。上記の修正は、Cookie の発行をフォントサイズの変更時に行うというものです。
元のスクリプトでも、Archive ページへのリンクをクリックするなどして、ページ遷移することによって、Opera でも、 Cookie を発行することができます。つまり、Opera の window.onunload は、ページ遷移でしか発生しないイベントであり、ウィンドウを閉じたり、リロードするだけでは、発生しないという、非常に発生条件が限定されたイベントなのです。このような仕組みでは、上記のような処理をするスクリプト向けではないので、確実に発生する処理内で Cokkie を発行するように修正したわけです。
英語になりますが、以下 URL にも説明があります。test page も用意されていますので、検証はそちらで。
Javascript - Event compatibility tables

ちなみに

IE の挙動はよくわかりません。
参照:http://oshiete1.goo.ne.jp/qa1413386.html
window.onunload をクロスブラウザで使うときは、ページ遷移時に動作させることを前提にした方が良さそうです。