Quake in the browser via javascript was done 5 years ago using GWT. I recall seeing that port at Google I/O years ago.
https://github.com/SiPlus/WebQuake
I wonder how a JavaScript port done manually like this would compare to an emscripten port in terms of performance? It was a little choppy on my old laptop that can run Quake 3 decently.