3

他の(すべての)ブラウザで動作するときにFirefoxで動作しない理由について少し混乱しています。

EventSourceの初期化とリスナーの登録:

var output = new EventSource('/subscribe');

output.addEventListener('shell_stream', function(e) {
    $('#shell-output').append(e.data + "<br/>");
}, false);

次に、ページの読み込み時にクエリ文字列を調べ、ファイルと実行アクションがある場合は、それらをサーバーに(ajax経由で)送信し、サーバーは上記で登録されたリスナーにデータを送り返します。

スクリプトをたくさんデバッグしました。それは要求を送信し、有効な応答を受信し、サーバーは確実にリスナーにデータを送信します。

ただし、Firefoxでは、リスナーはまったく反応しません。

ユーザーが[実行]ボタンをクリックすると、リスナーが完全に機能することに注意してください。このボタンは、ファイルと実行がクエリ文字列で見つかった場合にページの読み込み時に呼び出されるのとまったく同じ関数を呼び出します。

また、alert()ページの読み込みを起動してユーザーがクリックすると、リスナーが機能します。

さまざまなブラウザで試すためのライブリンクは次のとおりです。

http://cibox.org/slivu/stackoverflow?file=extract-image.rb&run=true

ありがとうございました。

4

1 に答える 1

2

最終更新

これを別の投稿に移動しました:

https://stackoverflow.com/questions/13159977


===更新===

onopenN秒ごとに呼び出される忘れた/逃した:)

だから私のファイルは永遠に実行されていました:)

今のところ醜いハックを使用しています:

initialized = false;
var output = new EventSource( ... );

output.onopen = function() {
  if(initialized) return true;
  initialized = true;

  ...
  invoke_file_runner( ... );
}

initialized一度だけ実行されることを確認してください。


それを見つけた!

私のコードは次のようになります:

var output = new EventSource( ... );
...
invoke_file_runner( ... );

興味深いのは、すべてのブラウザで、invoke_file_runnerが実行されたときに接続がすでに確立されていることです。

後で接続が確立されるFirefoxを除きます。

方法と理由がわかりません。

修正は簡単です:

var output = new EventSource( ... );
output.onopen = function() {
  ...
  invoke_file_runner( ... );
}

これにより、invoke_file_runner接続が確立された後にのみが実行されるようになります。

于 2012-10-30T23:40:02.213 に答える