2009-10-15 60 views
0

當我使用Paul Schreiber's unescapeHtml string method將一大串轉義HTML插入到CKEditor實例中時,我最近刷新了Firefox對單個XML節點的4096字節(4KB)限制。這種方法在Firefox 3.5.3中沒有處理大小超過4KB的字符串,因爲一旦達到每個節點的4096字節限制,瀏覽器就會將內容分割成多個節點。在使用此unescapeHtml方法時,不會返回完整的字符串,而只會在Firefox 3.5.3中返回前4096個字節。如何將大於4096字節的轉義HTML字符串插入CKEditor實例?

解決這個4KB節點限制的最直接和最有效的方法是什麼?

+0

這樣的問題存在的問題是:A)他們實際上不是問題,B)他們太廣泛了,基本上是無法回答的,C)他們沒有像「這個人在尋求幫助」那樣的感覺,他們感覺就像「這個人要求我完善他的代碼,以便他不必」。這使得任何人都無法給出令人滿意的答案(不是任何人都希望每C)。我建議修改這篇文章來問一個具體的問題(例如,「有沒有更快的方法來做這一個循環?」,而不僅僅是「你有任何改進性能或可讀性的建議嗎?」)。 – machineghost 2009-10-20 22:39:05

+0

感謝您的反饋。我是StackOverflow的新手,可以看到它被鼓勵發佈更具體的「我該怎麼做X」的問題。我故意將這個問題留作廣泛邀請進行一般性討論,我的意圖不是限制迴應選項。我會稍微改進我的問題。 – 2009-10-21 23:14:03

回答

0

我將提供解決節點大小限制問題的第一種方法。我修改了unescapeHtml代碼,通過創建循環遍歷每個childNode並將nodeValues附加到結果的循環來處理Firefox將數據拆分爲多個節點。然後,該函數清理與Matt Thommes' concise remove all child nodes code

幫助的節點我的代碼如下:

//htmlToCKEditor 
// Arguments: 
// 1. contentCK - Escaped content (likely HTML) to be inserted into CKEditor. (string) 
// 2. targetCK- The ID of the target CKEditor instance. (string) 
// Creates a temporary element, inserts the escaped content into the innerHTML, 
// loops over every childNode, appends each nodeValue to the result string, 
// removes the temporary element's child nodes, sets the data of the CKEditor to the new unescaped value. 
function htmlToCKEditor (contentCK,targetCK) { 

    // Return false if there's no target CKEditor instance 
    if (!(targetCK.match(/\w+/))){ 
    return false; 
    } 

    if (contentCK.match(/\w+/)){ 
    var thisHTML = unescape(contentCK); 
    var temp = document.createElement("div"); 
    temp.innerHTML = thisHTML; 

    // Loop over childNodes and append values to result variable. 
    var result = ''; 
    for (var i=0; i < temp.childNodes.length; i++){ 
    result += temp.childNodes[i].nodeValue; 
    } 

    // Cleanup from Matt Thommes 
    if (temp.hasChildNodes()){ 
    while (temp.childNodes.length >= 1){ 
    temp.removeChild(temp.firstChild); 
    } 
    } 

    // Set CKEditor instance of choice with the newly unescaped result. 
    CKEDITOR.instances[targetCK].setData(result); 
    }else{ 
    CKEDITOR.instances[targetCK].setData(''); 
    } 
    return true; 
} 

有一些替代的方法一個可能需要做到這一點,所以我改進我的問題和分裂我的代碼作爲答案。我很想讀這個問題的更多解決方案,因爲我不完全熟悉CKEditor方法,並且CKEditor中可能有一個更簡單的解決方案。

相關問題