Я не знаю о каких-либо конкретных ограничениях размера браузера, но если вы назначаете строку длиннее 65536, Chrome разбивает ее на множество elem.childNodes
, поэтому вам, возможно, придется перебирать эти узлы и объединять их.
Запустите приведенный ниже фрагмент в Chrome Dev Tools. Он создает строку размером 160 КБ, но theDivElement.childNodes[0]
обрезается до 65536 символов.
var longString = '1234567890';
for (var i = 0; i < 14; ++i) {
longString = longString + longString;
}
console.log('The length of our long string: ' + longString.length);
var elem = document.createElement('div');
elem.innerHTML = longString;
var innerHtmlValue = elem.childNodes[0].nodeValue;
console.log('The length as innerHTML-childNodes[0]: ' + innerHtmlValue.length);
console.log('Num child nodes: ' + elem.childNodes.length);
Результат: (версия Chrome 39.0.2171.95 (64-разрядная версия), Linux Mint 17)
The length of our long string: 163840
The length as innerHTML-childNodes[0]: 65536
Num child nodes: 3
Но в Firefox innerHTML
не разбивает содержимое на множество узлов: (версия Firefox 34.0, Linux Mint 17)
"The length of our long string: 163840"
"The length as innerHTML-childNodes[0]: 163840"
"Num child nodes: 1"
Таким образом, вам нужно принять во внимание, что разные браузеры обрабатывают childNodes
по-разному и, возможно, перебирают все дочерние узлы и объединяют их. (Я заметил это, потому что пытался использовать innerHTML
для отмены экранирования > 100k HTML-кодированной строки.)
Фактически, в Firefox я могу создать innerHTML-childNodes[0]
длиной 167 772 160, зациклившись на i < 24
выше. Но где-то выше этой длины возникает ошибка InternalError: allocation size overflow
.
person
KajMagnus
schedule
18.12.2014