توفّر واجهة Clipboard
الخاصة بواجهة Async Clipboard API إمكانية القراءة والكتابة في محتوى حافظة النظام. يتيح ذلك لتطبيق ويب تنفيذ ميزات القص والنسخ واللصق. يمكنك لصق البيانات من الحافظة في تطبيق من خلال استدعاء الطريقة read()
، ونسخ البيانات إلى الحافظة من خلال استدعاء الطريقة write()
.
بالإضافة إلى النصوص والصور بتنسيق Portable Network Graphics (PNG) وملفات HTML التي تم تنظيفها وغير المنظَّفة وتنسيقات الويب المخصّصة، تتيح واجهة Async Clipboard API الآن أيضًا نسخ صور SVG ولصقها، ما يعني أنّه يمكنك أخيرًا التفاعل مع برامج تعديل الصور التي تتعامل مع ملفات SVG بشكل أكثر سلاسة من خلال نسخ صور SVG ولصقها كصور بدلاً من نصوص أو استخدام حلول بديلة غير مباشرة.
رصد ميزة دعم SVG
يمكنك رصد إمكانية استخدام صور SVG (وأي نوع MIME آخر) من خلال استدعاء طريقة ClipboardItem.supports()
الثابتة، وتمرير نوع MIME المطلوب إليها.
const supportsSVG = () => {
if (
!('supports' in window.ClipboardItem) ||
!window.ClipboardItem.supports('image/svg+xml')
) {
return false;
}
return true;
};
نسخ صورة SVG
انسخ صورة SVG عن طريق ملء
ClipboardItem
بكائن. تمثّل النقطة الثنائية الكبيرة التي تتضمّن بيانات صورة SVG القيمة، ويمثّل نوع النقطة الثنائية الكبيرة (أي 'image/svg+xml'
في هذه الحالة) المفتاح.
copyButton.addEventListener('click', async () => {
if (!supportsSVG()) {
return;
}
try {
const blob = await fetch(img.src).then((response) => response.blob());
await navigator.clipboard.write([
new window.ClipboardItem({
[blob.type]: blob,
}),
]);
} catch (err) {
console.error(err.name, err.message);
alert(err.message);
}
});
لصق صورة SVG
لإلصاق صورة SVG، اقرأ ClipboardItem
من الحافظة، واحصل على النوع المطلوب (أي 'image/svg+xml'
في هذه الحالة) باستخدام الطريقة getType()
. يعرض هذا الرمز كائنًا ثنائيًا كبيرًا يمكن تحويله إلى عنوان URL خاص بالكائن الثنائي الكبير،
ويمكنك بعد ذلك تعيينه إلى السمة src
الخاصة بالعنصر <img>
.
pasteButton.addEventListener('click', async () => {
if (!supportsSVG()) {
return;
}
const [clipboardItem] = await navigator.clipboard.read();
const svgBlob = await clipboardItem.getType('image/svg+xml');
if (!svgBlob) {
alert('No SVG in the clipboard.');
return;
}
const image = document.createElement('img');
const blobURL = URL.createObjectURL(svgBlob);
image.addEventListener('load', () => {
URL.revokeObjectURL(blobURL);
});
image.src = blobURL;
});
التنظيف
SVG هو تنسيق قوي يتيح، على سبيل المثال، استخدام نصوص برمجية مضمّنة. ويمكن أن يكون ذلك خطيرًا عندما يلصق المستخدم محتوًى من مصادر غير معروفة، لذا ينفّذ المتصفّح خطوة تنظيف. عند نسخ البيانات، تنشئ Async Clipboard API مستند SVG سليم البنية، ثم تكتبه في الحافظة. عند لصق البيانات، ينتج محلّل الأجزاء جزء SVG معالجًا بدقة. لذلك، قبل عملية اللصق، تظل سمات معالج الأحداث onclick
متوفرة، ولكن عند اللصق، تتم إزالتها.

عرض توضيحي
يمكنك استكشاف عملية نسخ ولصق ملفات SVG في
العرض التوضيحي. يمكنك الاطّلاع على
رمز المصدر
لمعرفة طريقة عمله. احرص على تجربة النقر على أي من الدوائر قبل وبعد عملية النسخ واللصق. بعد اللصق، تتم إزالة سمات معالجة الأحداث onclick
التي قد تكون خطيرة.
روابط ذات صلة
- البرامج المتاحة للجميع التي تستخدم هذه الميزة:
- إدخال ChromeStatus
- Intent to Ship
- خطأ في Chromium
- موقف WebKit بشأن المعايير
- موقف Mozilla بشأن المعايير
الإقرارات
نفّذ فريق Microsoft Edge إمكانية استخدام ملفات SVG مع واجهة Async Clipboard API في Chromium. راجعت هذه المشاركة "راشيل أندرو" و"أنوبام سنيغدها".