Shooting Starを3.2.5にした

http://rubyforge.org/projects/shooting-star/
とりあえず。

やっぱりIEカチカチ

Flashのバージョンをあげるというのもなんなので、いろいろ調査。
どうも、IEの場合、onloadが呼び出されない場合があるっぽい。
http://support.microsoft.com/kb/239638/ja
なのでxhr.rhtmlの110行目あたりを以下のように変更。

101|      Event.observe(window, 'load', function(){
102|        setTimeout(ms.connector = function(){
103|          if(ms.connection) return;
104|          if(ms.connecting && ms.connecting != 'xhr') return;
105|          var form = $("#{iframe_id}-form");
106|          form.uid.value = #{uid.to_json};
107|          form.tag.value = #{tag.to_json};
108|          form.sig.value = #{sig.to_json};
109|          var timerId = setTimeout(ms.connector, 3000);
110|          var useragent_is_ie = /*@cc_on!@*/false;
111|          if (useragent_is_ie) {
112|            $('#{iframe_id}').onreadystatechange = function(){clearTimeout(timerId)};
113|          } else {
114|            $('#{iframe_id}').onload = function(){clearTimeout(timerId)};
115|          }
116|          form.submit();
117|        }, meteorStrike.getFlashVersion() >= 8 ? 3000 : 0);
118|      });

IEだとCometレスポンスのJavaScriptがうまく実行されない

strike.rhtmlの12行目あたりを以下のように修正

  7|  (function(){
  8|    var channel = #{@channel.to_json};
  9|    var javascript = #{@javascript.to_json};
 10|    var execute = function(){
 11|      var useragent_is_ie = /*@cc_on!@*/false;
 12|      if (useragent_is_ie) {
 13|        var ms = parent.parent.meteorStrike[channel];
 14|      } else {
 15|        var ms = (parent.meteorStrike || parent.parent.meteorStrike)[channel];
 16|      }
 17|      if(ms) ms.evaluate(javascript, location.hash.slice(1));
 18|      else setTimeout(execute, 0);
 19|    };
 20|    execute();
 21|  })();


あと、ココを読んでxht.rhtmlの50行目あたりを以下のように修正。

 49|      ms.evaluate = function(js, serialId){
 50|        serialId = parseInt(serialId);
 51|        serialId = isNaN(serialId) ? 0 : serialId;
 52|        if(ms.executionCounter == null){
 53|          ms.executionCounter = serialId;
 54|        }
 55|        ms.executionQueue[serialId] = js;


動いてはいるので、元に戻した。

追記
処理の遅れが気になるので、xht.rhtmlの67行目あたりを以下のように修正。

 61|          setTimeout(function(){
 62|            if(js = ms.executionQueue[this]){
 63|              eval(js);
 64|              delete ms.executionQueue[this];
 65|              ms.executionCounter = null;
 66|            }
 67|          }.bind(serialId), 0);