ブラウザー固有のサイズ制限についてはわかりませんが、65536 よりも長い文字列を割り当てると、Chrome はそれを多数elem.childNodesに分割するため、これらのノードをループして連結する必要がある場合があります。
以下の抜粋を Chrome Dev Tools で実行します。160k の文字列を作成しますが、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エラーが発生します。