Yes, it seems to be by design (of Firefox' implementation of localstorage). It does not work for file:// URLs.
Persist.js currently has no workaround, the contents of your database will be cleared …
In order for Firefox to work offline, you have to remove the "localstorage" type manually, like this:
Persist.remove('localstorage');
Persist.js will issue a warning that globalStorage can't be used, and fall back to cookie storage, which has size limitations. On a side note, removing both localstorage and cookie storage will fall back to Flash. Flash will probably work, but it pops up a message which your users might find bewildering, and click away – viz:

What is left after removing localstorage, cookie and flash?
Nothing (as Gears is not available).
Cookie's the way to go – you will have to live with the size restraints!
The way to check for larger strings than the storage allows does not seem to work for me. I used:
Persist.size != -1 && Persist.size < JSON.stringify(tmp_answer_db).length
One work around for larger data might be to use a JS compressor to fit all into the cookie. Or save less – reduce to the essential! Don't use JSON, use your own notation. Even JSON is too large for the cookie.
Update: Detecting firefox in a local file:// environment and removing localstorage
//detect FireFox. If it's the Fox, AND running locally remove localstorage
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent) && window.location.protocol == 'file:'){
Persist.remove('localstorage');
}