Firefox has partly added support recently. They recognise ipfs:// as a valid protocol and allow extensions to implement it.
Extensions can't implement the raw IPFS protocol though, they need a companion application running the actual gateway, or can maybe use the WebRTC transport.
No, js-ipfs can run a full ipfs node right in a web page. It'll peer with other nodes over websockets, and do relaying if neccessary.
Does js-ipfs work yet? Around the time I first wrote hardbin people were saying you could use js-ipfs, but it just didn't work. My non-javascript node couldn't access content published by js-ipfs, which seems like a major flaw.