2010.10.21 Thursday | 17:24

  Flex( swf ) から呼び出した JavaScript で alert するとフリーズする Firefox トラブル

以前は問題無かったのですが、ここ最近だとは思います。
ソースコードをクリップボードをコピーする為に、swf を使っていますが、
swf 側でクリックしないと動作しないので、JavaScript を呼び出しています。

しかし、一度呼び出してクリップボードへのコピーは完了するのですが、再び
呼び出して「コピーされました」と alert させるようにしていたところ、そこで
固まります。仕方ないので、Firefox の場合のみ。setTimeout で alert を実行
するようにしました。

完全に固まるのでたぶん setTimeout で改善されると思ったらやはりそのようでした。
<script type="text/javascript">
var clip_str = "\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9"+
		"\u306b\u30b3\u30d4\u30fc\u3055\u308c\u307e"+
		"\u3057\u305f\u3000\u3000\u3000";


function orgCodeInit(id) {
	return "";
}
function orgCodeGetForClipcopy(id,shiftFlg,ctrlFlg) {
	var str = id.replace(/_object/g,'')
		.replace(/_name/g,'');
	var codeWorkString = "";

	objPre = document.getElementById(str);

	if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
		codeWorkString = objPre.innerText;
	}
	else {
		range = document.createRange();
		range.selectNode( objPre );
		codeWorkString = range.toString();
	}
	return( codeWorkString );
}
function orgCodeClipcopyEnd() {
	var userAgent = window.navigator.userAgent.toLowerCase();

	if (userAgent.indexOf("firefox") > -1) {
		setTimeout("alert(clip_str)", 10);
	}
	else {
		alert(clip_str);
	}
}

なんか、3.6.12 でなおったようなんですけど、ひょっとしたら Windows7 特有
かもしれないしなぁ・・・。どうせ処理的には setTimeout で問題無いので全部
変更しよっか考え中。