thickboxがおかしくなる(IE8限定)

※ 原因判明
これがもうびっくりするようなというか腰が抜けるような原因。bodyの最後に thickboxが入っていた。WordPressの script-loader.phpが thickboxL10nを差し込むようなんだけど、どのプラグインを使うとこれが差し込まれるかまでは調査せず。contact form 7あたりが怪しい気がするけど、ほかでもよく使ってるしなぁ。
で、自分で herder.phpに入れた thickboxとダブルで動いていたので、ウィンドウを二重に書いていたということで、チャンチャン。

 

標記の通りなんですが、「thickbox ie バグ」で検索したときに出てくるような、IEのバージョン判定の違いではありません。
thickboxやjQueryは問題ないとされてるバージョンですし。

動きを追ってみると、jQuery(domChunk).click()がIE8のときだけ 2回呼ばれている様子。
だから右の画面のように、1回ちゃんとウィンドウを描画したあとに、2回目を描いてウィンドウがつながっちゃっていると。
return false; してるはずなのに、なんでリエントラントしてるんだ?

そこを追っかけるのは大変なので、お手軽にグローバル変数を用意して、同じファイルを2度続けて描画しないようにしました。

var tb_init_a = "";

function tb_init(domChunk){
  jQuery(domChunk).click(function(){
  var t = this.title || this.name || null;
  var a = this.href || this.alt;
  var g = this.rel || false;
  if (tb_init_a != a) {
    tb_init_a = a;
    tb_show(t,a,g);
    this.blur();
  }
  return false;
  });
}

function tb_remove() {
  tb_init_a = "";
  jQuery("#TB_imageOff").unbind("click");

tb_remove()でグローバル変数の後片付けをしておかないとウィンドウを閉じて、同じウィンドウを開こうとしても二度と開かないので注意。