gpt4 book ai didi

javascript - EventSource 监听器不会在 Firefox 中的页面加载时触发

转载 作者:行者123 更新时间:2023-11-29 22:20:22 25 4
gpt4 key购买 nike

我对它在其他(所有)浏览器中工作时在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com