fckeditor的幾個問題的解決

 

FCKEditor幾個問題的解決

         Fckedtior這款開源的網頁富文本編輯器,我們在各個項目中經常用到,以前也碰到些問題,但解決起來都比較容易,網上的解決方案比較多,但在最新的版本(2.6)的應用時,又碰到了一些問題,也許某些問題在先前的版本中也會有,現在稍微總結一下,以免以後碰到類似的問題又忘記了解決的辦法,好記性不如爛筆頭嘛,不過這句話應該換成好記性不如爛鍵盤了爛如性,又碰到了一些問題,也許某些問題在先前的版本中也會有,經過

      第一個問題,需要Head標籤

該問題在「上傳圖片」的時候,或者「瀏覽服務器」時出現,病徵如下:


這個錯誤是因爲在
web.config文件中有如下配置:

<system.web>

      <pages styleSheetTheme="Default">

       

</system.web>

或者

<system.web>

      <pages Theme="Default">

       

</system.web>

因爲應用了主題,就要求所有頁面都有head元素

<head runat="server">

    <title>無標題頁</title>

</head>

但是,fckeditor中的這兩個文件中是沒用head元素的


解決的辦法是:

<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Connector" AutoEventWireup="false" StylesheetTheme=""%>

注意高亮代碼,也就是說加上該屬性(前提是上面提到的web.config文件中是使用的是StylesheetTheme,總之與web.config文件中對應起來,那邊如果使用的是

<pages Theme="Default">

那這邊也就:

<%@ Page Language="c#" Trace="false" Inherits="FredCK.FCKeditorV2.FileBrowser.Connector" AutoEventWireup="false" Theme=""%>

上面提到的兩個文件(connector.aspx,upload.aspx)都要做相應修改。

好了這個問題就算解決了。

第二個問題,禁止上傳

在「上傳圖片」的時候,或者「瀏覽服務器」時出現,大概意思是禁止上傳,還有查看服務器上的文件,出現如下提示:


這個問題我不太清楚以前的版本是否有,這其實不是一個問題,應該是隻是一個安全限制,限制沒用授權的用戶隨意上傳或者瀏覽服務器,那麼這個限制是在哪兒控制的呢?

就是在這個config.ascx文件中,有如下一個方法。

     private bool CheckAuthentication()

     {

         // WARNING : DO NOT simply return "true". By doing so, you are allowing

         // "anyone" to upload and list the files in your server. You must implement

         // some kind of session validation here. Even something very simple as...

         //

         //       return ( Session[ "IsAuthorized" ] != null && (bool)Session[ "IsAuthorized" ] == true );

         //

         // ... where Session[ "IsAuthorized" ] is set to "true" as soon as the

         // user logs in your system.

 

         return false;

     }

看下這個方法就能明白其中含義,也就可以輕易找到解決辦法。也就是這如果返回了false,就會出現上面的提示,也就不能上傳文件或者圖片。如果你不想限制,那麼就直接返回true,當然不建議這麼做,你至少得是登錄用戶纔能有這種上傳權限,當然這取決於具體情況,總之,你不能在這兒總是返回false

 

 

第三個問題,非法請求

也是在上傳的時候出現的,如圖所示:


這個問題解決辦法是修改一下
fckconfig.js文件

FCKConfig.LinkUpload = true ;

FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.' + _QuickUploadExtension + '?Type=File';

FCKConfig.LinkUploadAllowedExtensions = ".(7z|aiff|asf|avi|bmp|csv|doc|fla|flv|gif|gz|gzip|jpeg|jpg|mid|mov|mp3|mp4|mpc|mpeg|mpg|ods|odt|pdf|png|ppt|pxd|qt|ram|rar|rm|rmi|rmvb|rtf|sdc|sitd|swf|sxc|sxw|tar|tgz|tif|tiff|txt|vsd|wav|wma|wmv|xls|xml|zip|docx)$" ;              // empty for all

FCKConfig.LinkUploadDeniedExtensions = "" ;   // empty for no one

注意高亮代碼,這是修改時加上去的,這樣就可以,原因不是太清楚,估計和上面也提到過的config.ascx文件有關,因爲其中有個這樣的方法:

 

     public override void SetConfig()

     {

        

         TypeConfig[ "File" ].AllowedExtensions             = new string[] { "7z", "aiff", "asf", "avi", "bmp", "csv", "doc", "fla", "flv", "gif", "gz", "gzip", "jpeg", "jpg", "mid", "mov", "mp3", "mp4", "mpc", "mpeg", "mpg", "ods", "odt", "pdf", "png", "ppt", "pxd", "qt", "ram", "rar", "rm", "rmi", "rmvb", "rtf", "sdc", "sitd", "swf", "sxc", "sxw", "tar", "tgz", "tif", "tiff", "txt", "vsd", "wav", "wma", "wmv", "xls", "xml", "zip","docx","xlsx" };

         TypeConfig[ "File" ].DeniedExtensions          = new string[] { };

         TypeConfig[ "File" ].FilesPath                     = "%UserFilesPath%/";

         TypeConfig[ "File" ].FilesAbsolutePath             = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%file/file" );

         TypeConfig[ "File" ].QuickUploadPath           = "%UserFilesPath%";

         TypeConfig[ "File" ].QuickUploadAbsolutePath   = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );

     }

估計是加上'?Type=File'後,就可以利用的上面所提到的配置,也就是對某文件夾有了訪問權限了。這個問題就到這吧。

      第四個問題,中文編碼

應該是個用戶體驗的問題,是在使用fckeditor的插入「超鏈接」時碰到的。


上圖所示,就是我要做的動作是插入「超鏈接」,而且是在服務器上選擇文件作爲「超鏈接」的目標。


我在服務器上選擇的文件的名稱是包含中文的。選擇後在
fckeditor中出現的是如下情況:


顯然用戶一般不會接受這種結果,用戶更樂意接受這樣的效果:


如果要這樣的效果,我是修改了這個文件的一些代碼:

 

//oLink.innerHTML = sInnerHtml ;     // Set (or restore) the innerHTML,這是原來的,在601

         //張國鶯修改,

         var tempInnerHtml = decodeURI(sInnerHtml);

         tempInnerHtml = tempInnerHtml.substring(tempInnerHtml.lastIndexOf('/')+1,tempInnerHtml.length);

         oLink.innerHTML = tempInnerHtml;

至於原因和解決思路,大家就自己去思考吧!

 

轉載於:https://www.cnblogs.com/sifang2004/archive/2008/05/09/1190074.html