FreeTextBox實現機制

iDotNetSpace發表於2008-01-22
  剛開始試用FTB2.0的時候,感覺FTB真的很神,居然可以在網頁狀態實現編輯過程的What you see is what you get。看完FTB的文件(其實也不是很多的東西,估計就是用個NDOC或者什麼類似的工具生成的SDK文件)又仔細試做了幾個程式,覺得FTB的實現思路不復雜,但十分巧妙。它通過FTB這個中間部件將客戶端(瀏覽器)的程式(javascript程式碼)和後臺程式(C#寫的aspx等ASP.NET程式碼)緊密結合,從而實現了這種所見即所得的效果。

FTB的結構主要有三個名稱空間組成:
FreeTextBoxControls,FreeTextBoxControls.Design和FreeTextBoxControls.Support。

       使用得最多的是FreeTextBoxControls,基本上用到的介面部件都來自於這裡,例如ToolBar上每個功能Button可以在這裡找到對映,而每個Button又對應著javascrip中的一個函式功能。

例如:下劃線這個功能,有個Underline的類(繼承於ToolbarButton)實現,而這個類實際呼叫客戶端的一段javascript程式碼FTB_Underline(在FreeTextBox-ToolbarItemsSrcipt.js中)。

FreeTextBox實現機制function FTB_Underline(ftbName) { 
FreeTextBox實現機制    FTB_Format(ftbName,'underline'); 
FreeTextBox實現機制

        如果再深究下去,仔細跟蹤下這段js的程式碼又可以它呼叫FTB_Format這段程式碼(在FreeTextBox-MainScript.js中)。

FreeTextBox實現機制function FTB_Format(ftbName,commandName) {
FreeTextBox實現機制    editor 
= FTB_GetIFrame(ftbName);
FreeTextBox實現機制
FreeTextBox實現機制    
if (FTB_IsHtmlMode(ftbName)) return;
FreeTextBox實現機制    editor.focus();
FreeTextBox實現機制    editor.document.execCommand(commandName,'',
null);
FreeTextBox實現機制
FreeTextBox實現機制}
FreeTextBox實現機制

它正是通過document的execCommand方法來實現效果的,查MSDN文擋可以發現它對應執行的正是Underline的命令引數。

execCommand可以執行的命令引數:

FreeTextBox實現機制Command Identifiers
FreeTextBox實現機制2D-Position
FreeTextBox實現機制Allows absolutely positioned elements to be moved by dragging.
FreeTextBox實現機制
FreeTextBox實現機制AbsolutePosition
FreeTextBox實現機制Sets an element's position property to "absolute."
FreeTextBox實現機制
FreeTextBox實現機制BackColor
FreeTextBox實現機制Sets or retrieves the background color of the current selection.
FreeTextBox實現機制
FreeTextBox實現機制BlockDirLTR
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制BlockDirRTL
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制Bold
FreeTextBox實現機制Toggles the current selection between bold and nonbold.
FreeTextBox實現機制
FreeTextBox實現機制BrowseMode
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制ClearAuthenticationCache
FreeTextBox實現機制Clears all authentication credentials from the cache. Applies only to execCommand.
FreeTextBox實現機制
FreeTextBox實現機制Copy
FreeTextBox實現機制Copies the current selection to the clipboard.
FreeTextBox實現機制
FreeTextBox實現機制CreateBookmark
FreeTextBox實現機制Creates a bookmark anchor or retrieves the name of a bookmark anchor for the current selection or insertion point.
FreeTextBox實現機制
FreeTextBox實現機制CreateLink
FreeTextBox實現機制Inserts a hyperlink on the current selection, or displays a dialog box enabling the user to specify a URL to insert as a hyperlink on the current selection.
FreeTextBox實現機制
FreeTextBox實現機制Cut
FreeTextBox實現機制Copies the current selection to the clipboard and then deletes it.
FreeTextBox實現機制
FreeTextBox實現機制Delete
FreeTextBox實現機制Deletes the current selection.
FreeTextBox實現機制
FreeTextBox實現機制DirLTR
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制DirRTL
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制EditMode
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制FontName
FreeTextBox實現機制Sets or retrieves the font for the current selection.
FreeTextBox實現機制
FreeTextBox實現機制FontSize
FreeTextBox實現機制Sets or retrieves the font size for the current selection.
FreeTextBox實現機制
FreeTextBox實現機制ForeColor
FreeTextBox實現機制Sets or retrieves the foreground (text) color of the current selection.
FreeTextBox實現機制
FreeTextBox實現機制FormatBlock
FreeTextBox實現機制Sets the current block format tag.
FreeTextBox實現機制
FreeTextBox實現機制Indent
FreeTextBox實現機制Increases the indent of the selected text by one indentation increment.
FreeTextBox實現機制
FreeTextBox實現機制InlineDirLTR
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制InlineDirRTL
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制InsertButton
FreeTextBox實現機制Overwrites a button control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertFieldset
FreeTextBox實現機制Overwrites a box on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertHorizontalRule
FreeTextBox實現機制Overwrites a horizontal line on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertIFrame
FreeTextBox實現機制Overwrites an inline frame on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertImage
FreeTextBox實現機制Overwrites an image on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputButton
FreeTextBox實現機制Overwrites a button control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputCheckbox
FreeTextBox實現機制Overwrites a check box control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputFileUpload
FreeTextBox實現機制Overwrites a file upload control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputHidden
FreeTextBox實現機制Inserts a hidden control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputImage
FreeTextBox實現機制Overwrites an image control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputPassword
FreeTextBox實現機制Overwrites a password control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputRadio
FreeTextBox實現機制Overwrites a radio control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputReset
FreeTextBox實現機制Overwrites a reset control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputSubmit
FreeTextBox實現機制Overwrites a submit control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertInputText
FreeTextBox實現機制Overwrites a text control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertMarquee
FreeTextBox實現機制Overwrites an empty marquee on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertOrderedList
FreeTextBox實現機制Toggles the text selection between an ordered list and a normal format block.
FreeTextBox實現機制
FreeTextBox實現機制InsertParagraph
FreeTextBox實現機制Overwrites a line break on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertSelectDropdown
FreeTextBox實現機制Overwrites a drop-down selection control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertSelectListbox
FreeTextBox實現機制Overwrites a list box selection control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertTextArea
FreeTextBox實現機制Overwrites a multiline text input control on the text selection.
FreeTextBox實現機制
FreeTextBox實現機制InsertUnorderedList
FreeTextBox實現機制Toggles the text selection between an ordered list and a normal format block.
FreeTextBox實現機制
FreeTextBox實現機制Italic
FreeTextBox實現機制Toggles the current selection between italic and nonitalic.
FreeTextBox實現機制
FreeTextBox實現機制JustifyCenter
FreeTextBox實現機制Centers the format block in which the current selection is located.
FreeTextBox實現機制
FreeTextBox實現機制JustifyFull
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制JustifyLeft
FreeTextBox實現機制Left-justifies the format block in which the current selection is located.
FreeTextBox實現機制
FreeTextBox實現機制JustifyNone
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制JustifyRight
FreeTextBox實現機制Right-justifies the format block in which the current selection is located.
FreeTextBox實現機制
FreeTextBox實現機制LiveResize
FreeTextBox實現機制Causes the MSHTML Editor to update an element's appearance continuously during a resizing or moving operation, rather than updating only at the completion of the move or resize.
FreeTextBox實現機制
FreeTextBox實現機制MultipleSelection
FreeTextBox實現機制Allows for the selection of more than one site selectable element at a time when the user holds down the SHIFT or CTRL keys.
FreeTextBox實現機制
FreeTextBox實現機制Open
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制Outdent
FreeTextBox實現機制Decreases by one increment the indentation of the format block in which the current selection is located.
FreeTextBox實現機制
FreeTextBox實現機制OverWrite
FreeTextBox實現機制Toggles the text-entry mode between insert and overwrite.
FreeTextBox實現機制
FreeTextBox實現機制Paste
FreeTextBox實現機制Overwrites the contents of the clipboard on the current selection.
FreeTextBox實現機制
FreeTextBox實現機制PlayImage
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制Print
FreeTextBox實現機制Opens the print dialog box so the user can print the current page.
FreeTextBox實現機制
FreeTextBox實現機制Redo
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制Refresh
FreeTextBox實現機制Refreshes the current document.
FreeTextBox實現機制
FreeTextBox實現機制RemoveFormat
FreeTextBox實現機制Removes the formatting tags from the current selection.
FreeTextBox實現機制
FreeTextBox實現機制RemoveParaFormat
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制SaveAs
FreeTextBox實現機制Saves the current Web page to a file.
FreeTextBox實現機制
FreeTextBox實現機制SelectAll
FreeTextBox實現機制Selects the entire document.
FreeTextBox實現機制
FreeTextBox實現機制SizeToControl
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制SizeToControlHeight
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制SizeToControlWidth
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制Stop
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制StopImage
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制StrikeThrough
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制Subscript
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制Superscript
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制UnBookmark
FreeTextBox實現機制Removes any bookmark from the current selection.
FreeTextBox實現機制
FreeTextBox實現機制Underline
FreeTextBox實現機制Toggles the current selection between underlined and not underlined.
FreeTextBox實現機制
FreeTextBox實現機制Undo
FreeTextBox實現機制Not currently supported.
FreeTextBox實現機制
FreeTextBox實現機制Unlink
FreeTextBox實現機制Removes any hyperlink from the current selection.
FreeTextBox實現機制
FreeTextBox實現機制Unselect
FreeTextBox實現機制Clears the current selection.
FreeTextBox實現機制
FreeTextBox實現機制

       基本上每個命令引數都可以在FTB的FreeTextBoxControls中找到對應的實現類,如果覺得有些沒有實現,自己參照已經實現的功能來增加也十分簡單和方便。

        FTB還提供了公開的介面,例如繼承於ToolbarButton可以實現對應的工具按鈕,繼承於ToolbarDropDownList則實現下拉式選擇(如選擇字型那種),對應javascript的方法只須傳遞對應的方法名字串給類即可,自己寫的javascript可以放在js中,也可以放在ScriptBlock的字串引數裡面,前者前端檢視原始碼看不到,後者則將整個函式原始碼傳回,一切都十分公開和方便。
        這種思路是否也和ASP.NET的思路類似?
        由於javascript可以被多種瀏覽器支援(估計有些小相容問題,可以通過javascript來相容),因此FTB可以在多種環境下正常工作。現在用的這個blog系統(.Text)也用了FTB,但版本是1.6.3.26037(漢化版),有興趣可以在發表文章的地方檢視網頁原始碼看看,就會發現好多的FTB_XXX的javascript函式。這些在2.0已經全部集中放到FreeTextBox-ToolbarItemsSrcipt.js和FreeTextBox-MainScript.js中了,應該說這樣比較歸一些。

        如果擔心FTB的免費協議對商業用途有些影響的話,自己根據這個思路來開發一個適合自己產品用的所見即所得編輯器控制元件應該也不是難事。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-157107/,如需轉載,請註明出處,否則將追究法律責任。

相關文章