/ IE Must DIE

[FCKEditor 筆記] 我操你媽 IE

首先是 FCKEditor 的一個升級之後出現的 bug。原因不明,只知道在 IE6/7 底下會出狀況,之前的版本似乎不會,解決的辦法:

沒有。

詳細網址如下:http://www.fckeditor.net/forums/viewtopic.php?f=6&t=8814&start=0&st=0&sk=t&sd=a

嗯,這是個很嚴重的問題。因為在這個編輯器底下,我需要這種功能。後來透過一些垃圾方法測試過後發現,其實他不是失效,而是對於 DOM 裡面的 elements 有點感冒。換句話說,在選取這個動作,如果不是選取一個"元件"的話,其實他是可以正常運作的,但是,如果單單選取了某個元件的話,那麼它就會失效了。

解決的辦法是,從 DOM Tree 去 Hack 掉!方法一樣很垃圾,但是沒辦法,為了要能夠使用,所以只能這樣做。至於說,如果從編輯器裡面把元件洗出來編輯,那要怎麼放回編輯器呢?這種問題交給後端處理就好了,不用太傷腦筋啦(無責)。只是,這種 Hack 的方式,可能把它寫成 prototype 會比較方便一點吧(僅猜測、純嘴砲)。

function FCKeditor_OnComplete( editorInstance )
{
    try {
        editorInstance.Events.AttachEvent( 'OnSelectionChange', getSelectionHTML ) ;
    } catch(e) {}
}

function getSelectionHTML( editorInstance )
{
    try {
        var item = "";
        var selection = (editorInstance.EditorWindow.getSelection ? editorInstance.EditorWindow.getSelection() : editorInstance.EditorDocument.selection);    
        var range = (editorInstance.EditorWindow.getSelection ? selection.getRangeAt(selection.rangeCount - 1).cloneRange() : selection.createRange());
        if (editorInstance.EditorDocument.selection)
        {
            try {
                // rebuild the Selected "Element" which you got.
                var e = editorInstance.Selection.GetSelectedElement();
                if(e.tagName=="IMG") {
                    var OrgE = '<img ';
                    // rebuild the attributes
                    if(e.getAttribute('src')) OrgE += 'src="'+e.getAttribute('src')+'" ';
                    if(e.getAttribute('alt')) OrgE += 'alt="'+e.getAttribute('alt')+'" />';
                    item = OrgE;
                } else if(e.tagName=="DIV") {
                    var OrgE = '<div ';
                    // rebuild the attributes
                    if(e.getAttribute('title')) OrgE += 'title="'+e.getAttribute('title')+'"></div>';
                    item = OrgE;
                } else {
                    item = range.htmlText;
                }
            } catch(z) {
                item = range.htmlText;
            }
        }
        else
        {
            var clonedSelection = range.cloneContents();
            var div = document.createElement('div');
            div.appendChild(clonedSelection);
            item = div.innerHTML;
        }
        if((item.substring(1,4)=='img'||item.substring(1,4)=='div')) {
            // do something here.
            alert(item);
        }
    } catch(e) {}
}

最後,我還是要靠北一下,我操你媽 IE!