開發者工具 · HTML WYSIWYG 編輯器
剪貼簿上的豐富文字:格式如何在應用程式之間傳輸
· 背景
html 剪貼簿 內容可編輯
解釋富文字副本放置在剪貼簿上的多種格式、每個應用程式如何選擇一種格式,以及為什麼貼上的標記永遠不完全是複製的內容。
相同的副本,三種不同的貼上 - 打開時內容貼到瀏覽器、終端和郵件用戶端
複製的一個段落可以作為瀏覽器編輯器中的格式化內容到達,而在終端中作為未格式化的字元到達,因為目的地請求不同的表示形式。 ToolAcre 的貼上處理程序向剪貼簿請求 HTML 和純文字,然後遵循固定分支,而不是信任瀏覽器的預設插入。
如果存在 HTML,則原始豐富片段永遠不會直接進入表面。它首先通過消毒劑。如果不存在 HTML,則插入純文字。這個本地規則解釋了該編輯器的行為,但沒有說明每個郵件用戶端、作業系統或辦公室套件如何優先考慮剪貼簿資料。
此貼上處理程序讀取文字/html 和文字/plain; 更廣泛的剪貼簿風格不在證據範圍內
剪貼簿可以包含一個選擇的多個表示。此實作明確處理 `text/html` 和 `text/plain`。它不列舉 RTF、圖片、檔案引用或特定於應用程式的格式,因此不應將這些暗示為支援的輸入。
這兩個字串可以編碼不同的訊息。純文字包含字元和換行符,而 HTML 可以包含段落、列表、強調和連結以及不需要的屬性。 ToolAcre 在可用時傾向於結構,但在插入之前透過其元素、屬性和 URL 策略縮小結構範圍。
誰編寫了 HTML 風格 - 解釋了來源應用程式產生了它,這就是為什麼 Word 和 Google Docs 貼上看起來如此不同
來源應用程式建立 HTML 表示形式,這就是為什麼兩個視覺上相似的副本可以提供不同的包裝器和表示形式。 ToolAcre 不識別生產者。它應用一個通用規則:無論來源為何,不支援的包裝器和屬性都會被刪除。
這可以防止 Word 或 Google Docs 內部的被動目錄成為產品宣告。刪除清單準確地告訴作者這個解析器拒絕了什麼。如果對來源應用程式的保真度很重要,請從支援的環境中捕獲真實的固定裝置並對其進行測試,而不是依賴通用的文章範例。
目的地如何選擇 - 包含偏好順序和貼上為純文字捷徑
目的地透過代碼選擇。在這裡,非空 HTML 獲勝;否則使用純文字。沒有用於「貼上為純文字」的工具列開關,且儲存庫來源沒有定義鍵盤快速鍵行為。瀏覽器和作業系統可以獨立提供此類手勢。
刪除處理與 DataTransfer 的想法相同:防止預設、讀取 HTML 和純值、在 `insertHTML` 之前清理 HTML,或透過 `insertText` 發送純字元。與貼上不同,放置路徑不會顯示相同的詳細刪除計數,但刷新仍會更新可見檔案。
此實作未明確解析平台片段元資料
某些平台將 HTML 剪貼簿片段包裝在元資料或標籤中,但 ToolAcre 不包含針對指定平台格式的明確解析器。它的標記產生器看到 `getData("text/html")` 傳回的字串並處理識別的標記。因此,本文省略了標頭語法、偏移量和特定於作業系統的保證。
如果包裝器顯示為註釋,則註釋將被刪除。如果元資料到達可識別的 HTML 之外,則應測試行為。定性的可能性不足以宣告對程式碼從未命名的平台協議的支持或拒絕。
工作範例:將豐富的剪貼簿有效負載與純純有效負載進行比較
複製包含強文字、簡短清單和 https 連結的非敏感段落。豐富的貼上可以保留那些允許的結構,刪除來源樣式並將 rel 添加到連結。檢查來源和刪除警告。然後透過不提供 HTML 的環境貼上純文字表示形式。
普通結果包含在選擇處插入的字元;任何區塊結構都是由瀏覽器編輯主機決定的,而不是從原始 HTML 中恢復的。與元素分開比較單字和行邊界。這個練習演示了表示之間的轉換,而不是逐字節複製。
這不包括什麼 - 剪貼簿 API、圖片、平台快捷方式或權限矩陣
本文不涉及 navigator.clipboard 程式設計、權限提示、剪貼簿影像、檔案、RTF、行動捷徑或跨平台首選項矩陣。它還沒有聲稱攔截的豐富貼上可以使任意惡意 HTML 安全發布。
ToolAcre 的清理工具很窄並承認解析器差異。它的沙箱會阻止本機預覽中的執行,但複製的 HTML 會離開該環境。接收伺服器需要適當的基於解析器的清理程序和輸出策略,而使用者應避免將機密貼到任何未經審查的頁面中。
重點:貼上是翻譯,而不是副本 — 總結了模型以及 ToolAcre 的 HTML WYSIWYG 編輯器如何讓您檢查翻譯產生的內容
豐富的貼上是一種翻譯:來源寫入表示形式,目標選擇一個表示,ToolAcre 在插入之前過濾所選的 HTML。了解該順序可以解釋為什麼格式可以消失而不將剪貼簿視為損壞。
使用代表性裝置,檢查產生的來源並在清理可能消除意義時保留原始內容。普通粘貼對於重置演示很有用,而豐富的粘貼可以保留結構。這兩條路徑都不能減輕目的地的衛生、相容性測試或編輯審查的負擔。