【成功】編集画面のバックアップのOpera対応

 ついに動いた!!
 『編集画面のバックアップのOpera対応(挫折中)』の続きです。
 苦節3週間。Opera9.2で編集画面のバックアップ機能がやっと動きました。
 苦しめられたバグのほとんどは、私のテスト環境の問題でした。最初から手を抜かず、真面目に環境を作っておけば良かったです。orz

 以下、具体的な修正部分です。

編集画面のHTMLについて。

 特に変更は有りません(^^)
 Opera9.2以前には『document.getElementById関数がIEの様にnameを返す問題』というのがありまして、

<div id="backup">

という表記がやべぇ、と思ってましたが、セーフでした。上記div要素の特定にgetElementByIdメソッドを使ってなかったので。

prototype-1.4.0.jsについて

 こちらもセーフ。
 「prototype 1.4.0のevalScriptsがOperaでは動かないらしい」問題が気になってましたが、今回はコード変更無しで動きました。

diary_backup.jsについて

 こちらは、「opera外し」を外す必要が有ります。
 DiaryBackup.prototypeのinitializeメソッドで、

 if ((ua.indexOf("Win")>=0 || ua.indexOf("Mac")>=0)
    && !window.opera
    && LocalStorage.getFlashVersion()<8) {

となっている部分を変更して、Opera9以降を通す必要が有ります。
 マトモなコードは適宜考えていただくとして、今回はとりあえず、

var isOpera9 = function(){
 if (!window.opera) return false;
 return navigator.userAgent.match(/Opera[\s\/]9\.\d+/);
}

と言う関数を冒頭に定義して、当該箇所を

 if ((ua.indexOf("Win")>=0 || ua.indexOf("Mac")>=0)
    && !isOpera9()
    && LocalStorage.getFlashVersion()<8) {

としました。
 このスクリプトの変更はココだけです。

local_storage.jsについて

 こちらも、「opera外し」を外す必要が有ります。
 また、OperaではFlashはembed要素として扱われますので、その辺も若干修正します。


 まずは「opera外し」外しから。
 LocalStorageオブジェクトのクラス定義部分にあるisUsableクラス・メソッドの

 if (window.opera) return false;

を、

 if (window.opera) return navigator.userAgent.match(/Opera[\s\/]9\.\d+/);

とします。
 また、Flashをembed要素として扱う為に、getFlashVersionクラス・メソッドの

 if (document.all) { // Win IE

を、

 if (document.all && !window.opera ) { // Win IE

と書き換えます。
 コレで終わりです。

テスト結果

 自前のパソコン上にサーバーを立てて実験しました。
 WinXPsp2上の「Opera9.20 Build 8771」+「Flash Player 9,0,45,0」で検証しました。
 バックアップの保存、保存内容の復帰、保存内容の消去、保存容量設定の変更について、正常に(というか、Firefox2.0.0.3と同様に)動作しました。


 以上、お忙しいところ恐縮ですが、d:id:naoya様にトラックバックさせていただきます。m(_ _)m
 なお、本件はidea:10858にてアイデア登録されてます。(誰も買ってくれないけど)

おまけ: テストが上手くいかなかった理由

 恥を晒すのはウツですが、今後同じミスを繰り返さない為にメモっておきます。

  • d.hatena.ne.jpとやり取りがあるので、テスト用編集画面と同じアカウント名でログインしておくこと
    • ブラウザを切り替えながらテストしてると、いつのまにかログアウトしてることがあります。
  • strage.swfは自分のサイトに置くこと
    • 別のドメインからは呼べないみたい。あるいはd.hatena.ne.jp側でブロックしてるのかも?
    • サーバー側で、Flash用のhttpヘッダを設定しておくこと
      テスト用仮想サイトの設定時に忘れてましたorz
  • サーバー側で実行権限やセキュリティを設定しておくこと
    • これも、仮想サイトの設定時に失敗してました。アホや。orz

 ・・・分かってみれば、たったこれだけ。あー恥ずかしい。
 2年もコンピュータ触って無いと、勘が鈍りまくることが、ハッキリと分かりました(滝汗;;;