修正一個 FCKeditor.Net 2.6.3 的 Bug

分享到噗浪!

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

JavaScript 錯誤:'this.LinkedField.value' 是 null 或不是一個物件 

即便我更新 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 是 Open Source 的產品,所以我就將原始碼抓回來小改了一下,就真的把問題給徹底解決了!

首先,先下載 FCKeditor.Net_2.6.3.zip 回來,找到 FCKeditor.cs 檔案的第 359 行,將此行改成以下即可:

sLink += "editor/" + sFile + "?InstanceName=" + HttpUtility.UrlEncode(this.ClientID);
其實也只是將 this.ClientID 加上 HttpUtility.UrlEncode() 而已。

FCKeditor.cs 檔案的第 359 行,將 this.ClientID 加上 HttpUtility.UrlEncode() 即可

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

  

此文章由 will 發表於 2008/7/31 上午 10:29:13

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: ASP.NET | JavaScript

標籤: , ,

評論

三月 23. 2009 19:25

eric

to 保哥

我在研究如何將Fckeditor.value 寫入 Sql server 2005 開好的欄位,但是一直顯示有問題,是否能指引一二 ?   這個問題對您來說可能太粗淺 ^^" 非常抱歉,但是我實在缺乏指點

fckeditor.aspx:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{


protected void Button1_Click1(object sender, EvntArgs e)  
{  

using (SqlConnection conn = new SqlConnection())  
{

conn.ConnectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;  
SqlCommand cmd = new SqlCommand();  
cmd.Connection = conn;  
cmd.CommandText = "insert into Table1(t_text) values(@t_text)";  
cmd.Parameters.AddWithValue("t_text","FCKeditor1.Value");  
conn.Open();  
cmd.ExecuteNonQuery();  
}  
    }
}


出現的錯誤是譯器錯誤訊息: CS0246: 找不到型別或命名空間名稱 'EvntArgs' (您是否遺漏 using 指示詞或組件參考?)

原始程式錯誤:

行 12:
行 13:
行 14: protected void Button1_Click1(object sender, EvntArgs e)  



eric 台灣

三月 24. 2009 09:38

ruzen

To eric,
修改Button1_Click1(object sender, EvntArgs e) =>
Button1_Click1(object sender, EventArgs e)

另外cmd.Parameters.AddWithValue("t_text","FCKeditor1.Value");中的
FCKeditor1.Value應該不用再加雙引號了吧!?

ruzen 台灣

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading