The JVM is very language specific. For example it has op codes for allocating java objects. A truly cross language virtual machine doesn't have anything anywhere near that high level or specific to a particular language.
Second, javascript can be the compile target of LLVM bytecode. You can compile your favourite C program to js
But in doing so will lose all of the ability of the compiler to see what you actually wanted to do, and to optimise your code.
asm.js can be set as target for emscripten. The browsers supporting asm.js simply JIT it to bytecode, and those which don't still can run asm.js, but way slower.
Alternatively, we could skip the added complexity of javascript, and just provide the byte code directly to the browser.