﻿# 修正一個 FCKeditor.Net 2.6.3 的 Bug

我們有個網站，每次當頁面載入 FCKeditor 的時候，全公司就只有我的電腦可以正常執行，其他的開發人員都無法正確載入 FCKeditor，都會出現【'this.LinkedField.value' 是 null 或不是一個物件】的錯誤訊息（如下圖），這真的又是一件很詭異的事，且又再度證明一點，電腦其實是會挑人出問題的！（註：好幾次客戶打電話來問我問題時，電腦都會在我接起電話的當下自動恢復正常）

[![JavaScript 錯誤：'this.LinkedField.value' 是 null 或不是一個物件](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ee450f76a847e7a88447-image_thumb_1.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f22551691deece6ecc57-image_4.png) 

即便我更新 FCKeditor.Net 組件到 2.6.3 目前的最新版，還是一樣有這個問題。這個問題也是另一個累積好幾個星期的問題，我也是一直沒時間看，到昨天才靜下心來把問題給解決。

問題是這樣的，FCKeditor 在載入的時候，會透過一個 iframe 載入編輯器，語法如下：

```
<iframe id="ctl00_main_DetailsView1___內文_FCKEdit___Frame" 
    src="/js/fckeditor/editor/fckeditor.html?InstanceName=ctl00_main_DetailsView___內文_FCKEdit&amp;Toolbar=FullPage" 
    width="100%" height="600px" 
    frameborder="no" scrolling="no"></iframe>
```

由以上範例得知，於我們的欄位有用到中文，不過因為我們整個網站的網頁、CSS與JavaScript全部都用 UTF-8 編碼，照理說不會有這個問題，像我的 IE 就無此問題，且在 Firefox 中也從未發生過問題過，但是我在這個 iframe 中的 src 屬性看出了端倪，因為載入 fckeditor.html 的時候有載入幾個 QueryString，其中的 InstanceName 參數並沒有用 UrlEncode 編碼過，我就猜想應該是這裡誤判了！

因為 [FCKeditor.Net](http://sourceforge.net/project/showfiles.php?group_id=75348&package_id=137125) 是 Open Source 的產品，所以我就將原始碼抓回來小改了一下，就真的把問題給徹底解決了！

首先，先下載 [FCKeditor.Net\_2.6.3.zip](http://downloads.sourceforge.net/fckeditor/FCKeditor.Net_2.6.3.zip?modtime=1217084441&big_mirror=0) 回來，找到 FCKeditor.cs 檔案的第 359 行，將此行改成以下即可：

```
sLink += "editor/" + sFile + "?InstanceName=" + HttpUtility.UrlEncode(this.ClientID);
```

其實也只是將 this.ClientID 加上 HttpUtility.UrlEncode() 而已。

[![FCKeditor.cs 檔案的第 359 行，將 this.ClientID 加上 HttpUtility.UrlEncode() 即可](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/17c2c332464bc7772ffd-image_thumb.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d8aa80780fd62012096c-image_2.png)

將 QueryString 的參數加以編碼(UrlEncode)是個好習慣，各位應該盡量用網路最標準的方式開發網站，比較不會遇到這類的問題。
