【成功】編集画面のバックアップの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は自分のサイトに置くこと
- サーバー側で実行権限やセキュリティを設定しておくこと
- これも、仮想サイトの設定時に失敗してました。アホや。orz
・・・分かってみれば、たったこれだけ。あー恥ずかしい。
2年もコンピュータ触って無いと、勘が鈍りまくることが、ハッキリと分かりました(滝汗;;;