iGoogleのガジェットがFirefoxでクリップボード操作する時

投稿者: | 2008年7月18日

Web上クリップボードを扱おうかと思ったらいきなり壁が。
IEは問題なく可能なのだが、Firefoxでは不可なのだ。
いろいろ調べていたら、すばらしいアイデアで実現されている方がおられた。
ウノウラボ(JavaScriptでクリップボードを使う(IE/Firefox) )
この記事を元に実現したのが、私が開発中の便利ツールの一つ「mimeTeXを活用しよう」だ。
このアイディアは、JavaScriptからFlashを操作できるExternal API(Flash Player8以降で可能となったもの)を利用している。
これで、ブラウザ上からクリップボードを扱えるようになった。
このツールを、iGoogleのガジェットに移植しようとしたところ、うまく動作せず。
Flashを扱うのは初めてであり、いろいろ調べたり、試行錯誤してみたりしたが、最終的にたどりついた原因は、swfファイルの呼び出し元呼び出し先のドメインが異なっていたことであった。
これの具体的な解決策としては、

System.security.allowDomain();

を記述することであった。
これを元にスクリプトを以下のとおり書き換えた(というか、1行挿入しただけ)。

import flash.external.ExternalInterface;
class clipbrd {
static function main () {
System.security.allowDomain(‘www.google.co.jp’);
var clip = new clipbrd();
}
function clipbrd() {
ExternalInterface.addCallback(“copyText”, this, copyText);
}
function copyText(s:String) {
System.setClipboard(s);
}
}

これを、MTASCというフリーのFlashコンパイラでコンパイルしてできたswfファイルを使用したところ、うまく動作した。
コンパイルのコマンドは、

mtasc -version 8 -swf clipbrd.swf -main clipbrd.as -header 1:1:1

である。
試せます。

引き続き、改良作業中。


また、
クリップボード操作用のjsファイルのclipbrd.jsも修正した。以下のとおり、_IG_EmbedFlash を使用してみた。

_IG_EmbedFlash(“http://mobagitukai.xrea.jp/gadget/mimetex/clipbrd.swf”,
“flashcontainer”,
{
id: “obj_id”,
swf_version: 7,
width: 1,
height: 1
});
if (navigator.appName.indexOf(“Microsoft”) != -1) {
clipbrd = new Object();
clipbrd.copyText = function(txt) { clipboardData.setData(“Text”, txt); }
} else {
clipbrd = document[‘obj_id’];
}