はてな市民にもなったことだし、群衆の叡智を使ってみる

windowsでfirefox3.0系

radio-iのトップページにある曲目検索の上に透明な画像を重ねて、新しいタブで開くようにするgreasemonkeyをつくった。
でもなぜか、一度リロードしないと期待する動作(曲目検索のページへのリンク)をしてくれない。


曲目検索のflash

問題のソースコード

// ==UserScript==
// @name           radio_i_flash_mask
// @namespace      http://d.hatena.ne.jp/Cherenkov/
// @include        http://www.radio-i.co.jp/*
// ==/UserScript==

function flashMask(flash_id,embed_number,type){

	var link = document.createElement('a');
	link.href ='http://www.radio-i.co.jp/NOAView/cgi-bin/NOAData.Now?id=0469';

	var img = document.createElement('img');
	img.style.position = 'absolute';
	img.style.zIndex = 1000; //意味なさそう
	img.src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABnRSTlMA%2FwD%2FAP83WBt9AAAADElEQVR4nGP4%2F%2F8%2FAAX%2BAv4N70a4AAAAAElFTkSuQmCC';
	img.width = flash_id=='nowPlayTop' ? 297 : 160;
	img.height = flash_id=='nowPlayTop' ? 95 : 127;
	
	link.appendChild(img);

	document.getElementsByTagName('embed')[embed_number].setAttribute('wmode','transparent');

	var nowPlay = document.getElementById(flash_id);
	nowPlay.insertBefore(link,nowPlay.firstChild);

}

//top page
if(location.href=='http://www.radio-i.co.jp/'||location.href=='http://www.radio-i.co.jp/index.php'){
	flashMask('nowPlayTop',2);
}

インストール

radioi_flash_mask.user.js

この現象を再現するには

上のradioi_flash_mask.user.jsをインストールしたあと、新しいタブで開いたばかりのradio-iのトップページで起きます。リンクに飛んで戻るを押して戻ってきたり、リロードをすると、透明な画像が被さってちゃんと機能するようになる。問題の現象に戻すには一度タブを閉じて、新しいタブに開きなおしてください。

なんでだろう

  • このflash自体は、load_swf("swf/topticker.swf",297,95);で呼び出されてて非同期に表示されてて、greasemonkeyの実行よりも遅いから透明処理が適応されない?とかおもったけど、ちゃんとembedタグ内にはtransparentセットされてるしなぁ。
  • aタグの挿入位置の問題かとおもってずらしたり、上げたりもしてみたが関係ないのかなぁ。

オラに力を分けてくれ

解決策をお待ちしております。