Sounds like an elegant solution to me.
A few points, not necessarily a criticism:
1) Keeping "raw" password in browser as a key for symmetric encryption/decryption maybe a concern.
2) Passwords are limited in length, and may not provide crytographic high strength if used as symmetric key directly. One option could be to derive the key from it:
var key =...