ShootingStar: 3.2.3にアップデートしてみた…が

http://rails.office.drecom.jp/takiuchi/archive/212
3.2.3がリリースされていたので、とりあえずアップデートしたら、夜が明けた…orz
なんか、いろいろと問題が。環境のせいかもしれないけど、いろいろひと段落したら、作者さんかMLに報告するかな…

IEでなぜか接続を繰り返す

どうもiframeのonloadイベントが走らなくて、xhr.rhtmlの97行目付近の以下のコードが動いていないような。

$('#{iframe_id}').onload = function(){clearTimeout(timerId)};

仕方ないので力技。

      ms.evaluate = function(js, serialId){
        ms.executionQueue[serialId] = js;
        if(serialId == ms.executionCounter){
          while(js = ms.executionQueue[ms.executionCounter]){
            eval(js);
            delete ms.executionQueue[ms.executionCounter];
            ++ms.executionCounter;
          }
        }

        if (window.shooting_star_clearTimeout_connector) {
          window.shooting_star_clearTimeout_connector();
        }
      };
      ...
      Event.observe(window, 'load', function(){
        setTimeout(ms.connector = function(){
          if(ms.connection) return;
          if(ms.connecting && ms.connecting != 'xhr') return;
          var form = $("#{iframe_id}-form");
          form.uid.value = #{uid.to_json};
          form.tag.value = #{tag.to_json};
          form.sig.value = #{sig.to_json};
          var timerId = setTimeout(ms.connector, 3000);

          window.shooting_star_clearTimeout_connector = function() {
            if (!timerId) { return; }
            clearTimeout(timerId);
            timerId = null;
            window.shooting_star_clearTimeout_connector = null;
          };

          $('#{iframe_id}').onload = function() {
            if (window.shooting_star_clearTimeout_connector) {
              window.shooting_star_clearTimeout_connector();
            }
          };

          form.submit();
        }, meteorStrike.getFlashVersion() >= 6 ? 3000 : 0);
      });
    })();

executeかなぁ…

view.rhtmlの14行目はexecuteかなぁ…

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <%= javascript_tag %Q{
  (function(){
    var channel = #{@channel.to_json};
    var javascript = #{@javascript.to_json};
    var execute = function(){
      var ms = parent.parent.meteorStrike[channel];
      if(ms) ms.evaluate(javascript, location.hash.slice(1));
      else setTimeout(evaluate, 0); # <-
    };
    execute();
  })();
  }%>
</head>
</html>

ms.evaluateがうまく動かない

serialIdを判定できていないような感じ。
とりあえずキューまわりのコードはコメントアウト。

      ms.evaluate = function(js, serialId){
        //ms.executionQueue[serialId] = js;
        //if(serialId == ms.executionCounter){
        //  while(js = ms.executionQueue[ms.executionCounter]){
            eval(js);
        //    delete ms.executionQueue[ms.executionCounter];
        //    ++ms.executionCounter;
        //  }
        //}

        if (window.shooting_star_clearTimeout_connector) {
          window.shooting_star_clearTimeout_connector();
        }
      };

環境とか

  • Windows
    • IE6
    • FF2
  • Linux
    • FF2

不具合の確認は全部IE。
対応後に上記3クライアントで同期が取れていることを確認。


追記
ついでにOperaでも動作確認、OK。