IT戦記 このページをアンテナに追加 RSSフィード Twitter

2009-01-06

Flash 10 でも「はてなダイアリー」の「バックアップ機能」を使えるようにするグリースモンキー

とりあえず、書きました。

書いたと言っても、ただ、関数を上書きして、再度 script を実行しているだけですが。

ソースコード

ご自由にご利用、改造、配布してください。

// ==UserScript==
// @name           DiaryBackup
// @namespace      http://d.hatena.ne.jp/
// @include        http://d.hatena.ne.jp/*/edit
// @include        http://d.hatena.ne.jp/*/edit?date=*
// ==/UserScript==

with (unsafeWindow) {
    var nativeDocWrite = document.write;
    var script = $A(document.getElementsByTagName('script')).last();
    var writeBuffer = [];
    document.write = function(html) {
        writeBuffer.push(html);
    };
    try {
        LocalStorage.getFlashVersion = function() {
            return navigator.plugins["Shockwave Flash"].description.match(/\d+/)[0];
        };
        document.write('\
            <div\
                id="storageswf-container"\
                style="background-color:#DDDDDD; border:2px solid #999999; padding:5;">\
                <div\
                    style="text-align:left; width:215; font-weight:bold; font-size:11pt">\
                    <img\
                        id="backup-setting-close"\
                        src="/images/admin/backup-close.gif"\
                        style="float:right; cursor:pointer" />\
                    \u30c0\u30a4\u30a2\u30ea\u30fc\u4fdd\u5b58\u5bb9\u91cf\u8a2d\u5b9a\
                </div>\
        ');
        LocalStorage.writeFlashTag('storageswf', '/tools/storage.swf');
        document.write('\
                <div\
                    class="note"\
                    style="width:215; font-size:10pt; text-align:left">\
                    \u3053\u306e\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306b\u4fdd\u5b58\u3059\u308b\u30c7\u30fc\u30bf\u306e\u6700\u5927\u5bb9\u91cf\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\
                    <br />\
                    \u53e4\u3044\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30c7\u30fc\u30bf\u306f\u81ea\u52d5\u7684\u306b\u524a\u9664\u3055\u308c\u307e\u3059\u304c\u3001\
                    \u983b\u7e41\u306b\u5bb9\u91cf\u304c\u4e0d\u8db3\u3059\u308b\u5834\u5408\u306f\u6700\u5927\u5bb9\u91cf\u3092\u5897\u3084\u3057\u3066\u304f\u3060\u3055\u3044\u3002\
                </div>\
            </div>\
        ');
    }
    catch(e) {
        alert(e);
    }
    finally {
        var dummy = document.createElement('div');
        dummy.innerHTML = writeBuffer.join('');
        document.body.insertBefore(dummy, script);
        document.write = nativeDocWrite;
    }
}

Flash 10 で「はてなダイアリー」の「バックアップ機能」が使えない件とその原因

はじめに

「はてなダイアリー」大好きっこの amachang です。

「はてなダイアリー」には、「バックアップ機能」という機能があってこれがめっちゃ便利です!

バックアップ機能とは

よく、 mixi とかで「せっかく書いたのに日記消えちゃいました><」的な日記をよく見ますよね。

あれをなくしてくれる機能なのです。

その機能は「日記を書く」ページ(http://d.hatena.ne.jp/edit)の一番下にあります。

しかし

Flash 10 では、以下のような状態になってしまい。バックアップ機能が使えません><

f:id:amachang:20090106100827j:image

これは困りました><

その原因

http://d.hatena.ne.jp/js/local_storage.js で、 Flash のバージョンを以下のように見ている箇所があって、

navigator.plugins["Shockwave Flash"].description.charAt(16)

この

navigator.plugins["Shockwave Flash"].description

の値が Flash 10 では

"Shockwave Flash 10.0 r12"

みたいな値になる。

当然、それの .charAt(16) は "1" となって、

         ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    < "Shockwave Flash 10.0 r12".charAt(16) は "1"!
    |      |r┬-|    |      Flash のバージョンは 1 !
     \     `ー'´   /
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"〜〜``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

ということになってしまっている。

(追記)すでにアイデアにあるみたいですね

(追記)だいぶ前から言われてたみたいですね><

はやく直して欲しいです><

.charAt(16) を .match(/\d+/)[0] にすればいいだけだと思うます><

(追記)とりあえず、グリモン書きました

Flash 10 でも「はてなダイアリー」の「バックアップ機能」を使えるようにするグリースモンキー - IT戦記