我对它在其他(所有)浏览器中工作时在 Firefox 中不起作用的原因感到有点困惑。
初始化 EventSource 并注册监听器:
var output = new EventSource('/subscribe');
output.addEventListener('shell_stream', function(e) {
$('#shell-output').append(e.data + "<br/>");
}, false);
然后在页面加载时,我查看查询字符串,如果有文件和运行操作,我将它们发送到服务器(通过 ajax),然后服务器将数据发送回上面注册的监听器。
大量调试脚本。 它确实发送请求并接收有效响应,并且服务器确保向监听器发送数据。
但是,在 Firefox 上,监听器不会以任何方式使用react。
值得注意的是,如果用户单击“运行”按钮,监听器将完美运行,如果在查询字符串中找到文件和运行,它调用的函数与页面加载时调用的函数完全相同。
此外,如果我在页面加载时触发 alert()
并且用户单击它,监听器将工作!
这是在各种浏览器中试用的实时链接:
http://cibox.org/slivu/stackoverflow?file=extract-image.rb&run=true
谢谢。
最佳答案
最终更新
将此移至单独的帖子:
https://stackoverflow.com/questions/13159977
===更新===
忘记/错过了每 N 秒调用一次 onopen
:)
所以我的文件永远运行:)
现在使用丑陋的 hack:
initialized = false;
var output = new EventSource( ... );
output.onopen = function() {
if(initialized) return true;
initialized = true;
...
invoke_file_runner( ... );
}
已初始化
确保它只会运行一次。
找到了!
我的代码是这样的:
var output = new EventSource( ... );
...
invoke_file_runner( ... );
有趣的是,在所有浏览器上,当执行 invoke_file_runner
时,连接已经建立。
firefox除外,firefox是后连接的。
不知道如何以及为什么。
修复很简单:
var output = new EventSource( ... );
output.onopen = function() {
...
invoke_file_runner( ... );
}
这将确保 invoke_file_runner
仅在连接建立后执行。
关于javascript - EventSource 监听器不会在 Firefox 中的页面加载时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12804074/