A very modern solution to this problem is glacambre's Firenvim, which automatically overlays text input boxes with a neovim window that syncs to the content of that text box. This uses your system neovim, with associated config and plugins(!). Subjectively, I have found it to be a significantly smoother experience than alternatives like It's All Text, or even wasavi. In addition, it has a full modern neovim implementation rather than a custom vi-like implementation, so using it involves much less context switching than wasavi, vimsert, or vimperator (which is no longer supported on modern firefox).
Firenvim supports Firefox and Chrome officially, and other Chrome-like browsers unofficially.
It does, however, require neovim to be installed, and because you are typing in an Nvim UI, you lose things like the textbox's native font (nvim cannot support non-monospaced fonts).