@Scootergrisen, okay, jeg syntes bare at jeg havde gjort det ret klart med min pseudo-kode - og du skrev ikke
hvad det var du ikke forstod, bare at du ikke forstod noget.
Anyways har jeg lavet en færdig implementering, som dog benytter console i stedet for DOM. Min implementation benytter den samme streng, da det er langt hurtigere end at generere end ny streng hver gang.
- <!DOCTYPE html>
- <html>
- <head>
- <title>Playground</title>
- <meta charset="utf-8" />
- <script type="text/javascript">
- // Globals
- var kDBKey = 'playground';
-
- // Create a long string
- function longString(astring, length, chunkSize, callback) {
- if(astring.length >= length) {
- callback(astring.substr(0, length));
- } else {
- astring += new Array(chunkSize).toString();
- setTimeout(longString, 13, astring, length, chunkSize, callback);
- }
- }
-
- function findStorageLimit(buffer) {
- var bufferSize = buffer.length;
- try {
- console.log('Storing buffer, size: ' + bufferSize + ' bytes');
- localStorage.setItem(kDBKey, buffer);
-
- return true;
- } catch(e) {
- console.log('Unable to store buffer');
-
- return false;
- }
- }
-
- function recursiveLimit(size, buffer, lower, upper, limit) {
- longString(buffer, size, 100000, function(aLongString) {
- var success = findStorageLimit(aLongString);
- if (success) {
- lower = size;
- } else {
- upper = size;
- limit = true;
- }
-
- if (upper === lower || ((upper-lower) === 1 && success)) {
- console.log("Max limit found: " + size.toString(10));
- return;
- }
-
- size = (limit) ? (lower + (upper-lower) / 2) : (size * 2);
- recursiveLimit(Math.floor(size), aLongString, lower, upper, limit);
- });
- }
-
- recursiveLimit(1, '', 0, 1024*1024*50, false);
- </script>
- </head>
- <body>
- </body>
- </html>
og kan fortælle at min Firefox kan klare 16777215 bytes ~ 16,78 MB og Chrome kun 2620179 bytes ~ 2,62 MB.