I added libsignal based E2EE for Converse.js, a web XMPP client.
Every tab is definitely not a new device. The browser itself is however a device.
The Signal desktop app is also basically a web-app wrapped in Electron.
The main issue with E2EE over a website is that served JavaScript can't be signed and verified and the code can change at any time. But Electron apps also self-update, so ?♂️
If the code is 100% FOSS and you self-host, it's much less of an issue