Skip to content

Commit 68800af

Browse files
wjw020206cycleccc
andauthored
fix: Safari paste image base64 and blob (#524)
* fix: fixed the issue with upload image urls in the Safari browser * revert: delete async --------- Co-authored-by: cycleccc <2991205548@qq.com>
1 parent 781f037 commit 68800af

File tree

3 files changed

+12
-68
lines changed

3 files changed

+12
-68
lines changed

packages/core/src/editor/helper.ts

-42
This file was deleted.

packages/core/src/editor/plugins/with-event-data.ts

+2-18
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import {
99

1010
import { IDomEditor } from '../..'
1111
import { getPlainText, isDOMText } from '../../utils/dom'
12-
import { IS_SAFARI } from '../../utils/ua'
1312
import { DomEditor } from '../dom-editor'
14-
import { convertBlobUrlToBase64, extractBlobUrlFromImg } from '../helper'
1513

1614
export const withEventData = <T extends Editor>(editor: T) => {
1715
const e = editor as T & IDomEditor
@@ -108,7 +106,7 @@ export const withEventData = <T extends Editor>(editor: T) => {
108106
return data
109107
}
110108

111-
e.insertData = async (data: DataTransfer) => {
109+
e.insertData = (data: DataTransfer) => {
112110
const fragment = data.getData('application/x-slate-fragment')
113111
// 只有从编辑器中内复制的内容,才会获取 fragment,从其他地方粘贴到编辑器中,不会获取 fragment
114112

@@ -121,23 +119,9 @@ export const withEventData = <T extends Editor>(editor: T) => {
121119
}
122120

123121
const text = data.getData('text/plain')
124-
let html = data.getData('text/html')
122+
const html = data.getData('text/html')
125123
// const rtf = data.getData('text/rtf')
126124

127-
if (IS_SAFARI) {
128-
const blobUrl = extractBlobUrlFromImg(html)
129-
130-
if (blobUrl) {
131-
const base64Data = await convertBlobUrlToBase64(blobUrl)
132-
133-
if (base64Data) {
134-
html = `<img src="${base64Data}" alt="image.png">`
135-
136-
URL.revokeObjectURL(blobUrl)
137-
}
138-
}
139-
}
140-
141125
if (html) {
142126
e.dangerouslyInsertHtml(html)
143127
return

packages/core/src/text-area/event-handlers/paste.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,26 @@
44
*/
55

66
import { IDomEditor } from '../../editor/interface'
7-
import { DomEditor } from '../../editor/dom-editor'
8-
import TextArea from '../TextArea'
9-
import { hasEditableTarget } from '../helpers'
107
import { isPlainTextOnlyPaste } from '../../utils/dom'
11-
import { HAS_BEFORE_INPUT_SUPPORT } from '../../utils/ua'
8+
import { HAS_BEFORE_INPUT_SUPPORT, IS_SAFARI } from '../../utils/ua'
129
import { EDITOR_TO_CAN_PASTE } from '../../utils/weak-maps'
10+
import { hasEditableTarget } from '../helpers'
11+
import TextArea from '../TextArea'
1312

1413
function handleOnPaste(e: Event, textarea: TextArea, editor: IDomEditor) {
1514
EDITOR_TO_CAN_PASTE.set(editor, true) // 标记为:可执行默认粘贴
1615

1716
const event = e as ClipboardEvent
1817
const { readOnly } = editor.getConfig()
1918

20-
if (readOnly) return
21-
if (!hasEditableTarget(editor, event.target)) return
19+
if (readOnly) { return }
20+
if (!hasEditableTarget(editor, event.target)) { return }
2221

2322
const { customPaste } = editor.getConfig()
23+
2424
if (customPaste) {
2525
const res = customPaste(editor, event)
26+
2627
if (res === false) {
2728
// 自行实现粘贴,不执行默认粘贴
2829
EDITOR_TO_CAN_PASTE.set(editor, false) // 标记为:不可执行默认粘贴
@@ -32,12 +33,13 @@ function handleOnPaste(e: Event, textarea: TextArea, editor: IDomEditor) {
3233

3334
// 如果支持 beforeInput 且不是纯粘贴文本(如 html、图片文件),则使用 beforeInput 来实现
3435
// 这里只处理:不支持 beforeInput 或者 粘贴纯文本
35-
if (HAS_BEFORE_INPUT_SUPPORT && !isPlainTextOnlyPaste(event)) return
36+
if (!IS_SAFARI && HAS_BEFORE_INPUT_SUPPORT && !isPlainTextOnlyPaste(event)) { return }
3637

3738
event.preventDefault()
3839

3940
const data = event.clipboardData
40-
if (data == null) return
41+
42+
if (data == null) { return }
4143
editor.insertData(data)
4244
}
4345

0 commit comments

Comments
 (0)