CommunityServer 2008.5 升級 ASP.Net 4 後 Tinymce 修復 (Issue fix)

Wednesday, 16 June 2010 01:51 by admin

在上一篇中,提到將大部分的 ASP.Net 應用程式升級到 ASP.Net 4 大都沒問題,其實在 ASP.Net 4 發表沒多久,我就已經把 CommunityServer 2008.5 放上去執行,很不幸的小問題有夠多

不過大部分的問題都是在 web.config 上,經過上一篇的教訓,絕大部分的問題已經解決,除了 Tinymce

說到 Tinymce ,這問題有夠怪,除了 IE 外,Firefox 或 Google Chrome 等等瀏覽器,都無法顯示出 Tinymce ,一開始以為是 Tinymce 的問題,但經過仔細看,才知道原來是連 Tinymce 的 javascript 都沒有載入,在端午節這天決定和他奮戰解決掉

不過很不幸的,Telligent.TinyMCEWrapper.dll 並不是 SDK 的一部分,這時只好動用 reflector 偷看,看了很久看不出所以然,直到看到

public bool IsSupported(HttpBrowserCapabilities browser) 
{ 
if (browser.IsBrowser("Opera")) 
{ 
return ((browser.MajorVersion > 9) || ((browser.MajorVersion == 9) && (browser.MinorVersion >= 0.5))); 
} 
if (browser.IsBrowser("Safari")) 
{ 
return (browser.MajorVersion >= 3); 
} 
if (browser.IsBrowser("IE")) 
{ 
if ((browser.MajorVersion < 6) && ((browser.MajorVersion != 5) || (browser.MinorVersion < 0.5))) 
{ 
return false; 
} 
return browser.Win32; 
} 
return browser.IsBrowser("Gecko"); 
}

彷彿見到了一片光芒,直覺就是前一篇提到的 App_Browsers 有相關,再追下去是誰用了這個鳥函數,裡面寫了一些沒遠見的程式碼,遲早會爆,追了一下原來是 \Source\CommunityServer.Controls\Editor\Editor.cs ,這個就在 SDK 裡面,可以自由破壞

改法很簡單,以下的程式碼都不要了(看您要註解掉或直接砍了),啥年代還在怕對方瀏覽器不支援

if (!editor.IsSupported(csContext.Context.Request.Browser)) 
{ 
if (!se.IsDefault) 
{ 
editor = Activator.CreateInstance(Type.GetType(csContext.Config.DefaultEditor.Type)) as ITextEditor; 
if (!editor.IsSupported(csContext.Context.Request.Browser)) 
editor = new DefaultTextEditor(); 
} 
else 
editor = new DefaultTextEditor(); 
}

編譯後 Tinymce IE only 問題就解了,後來查看了 TelligentCommunity ,新版也不採用這種爛方法了,這問題純粹是 CommunityServer 留下來的地雷

Pingbacks and trackbacks (1)+