روش مدرن
استفاده از API کلیپبورد ناهمگام
برای خواندن متن از کلیپبورد کاربر به صورت برنامهنویسی شده، برای مثال، پس از کلیک روی یک دکمه، میتوانید از متد readText() از API کلیپبورد Async استفاده کنید. اگر هنوز مجوزهای خواندن کلیپبورد اعطا نشده باشد، فراخوانی navigator.clipboard.readText() آن را در اولین فراخوانی متد درخواست میکند.
const pasteButton = document.querySelector('#paste-button');
pasteButton.addEventListener('click', async () => {
try {
const text = await navigator.clipboard.readText()
document.querySelector('textarea').value += text;
console.log('Text pasted.');
} catch (error) {
console.log('Failed to read clipboard');
}
});
روش کلاسیک
استفاده از document.execCommand()
با استفاده از document.execCommand('paste') میتوانید محتوای کلیپبورد را در نقطه درج (عنصر HTML که در حال حاضر روی آن متمرکز است) جایگذاری کنید. متد execCommand یک مقدار بولی برمیگرداند که نشان میدهد آیا رویداد paste موفقیتآمیز بوده است یا خیر. با این حال، این متد محدودیتهایی دارد، به عنوان مثال، به دلیل همزمان بودن، جایگذاری حجم زیادی از دادهها میتواند صفحه را مسدود کند.
pasteButton.addEventListener('click', () => {
document.querySelector('textarea').focus();
const result = document.execCommand('paste')
console.log('document.execCommand result: ', result);
})
بهبود تدریجی
pasteButton.addEventListener('click', async () => {
try {
const text = await navigator.clipboard.readText()
document.querySelector('textarea').value += text;
console.log('Text pasted.');
} catch (error) {
console.log('Failed to read clipboard. Using execCommand instead.');
document.querySelector('textarea').focus();
const result = document.execCommand('paste')
console.log('document.execCommand result: ', result);
}
});
مطالعه بیشتر
نسخه آزمایشی
اچتیامال
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link
rel="icon"
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🎉</text></svg>"
/>
<title>How to paste text</title>
</head>
<body>
<h1>How to paste text</h1>
<p>
<button type="button">Paste</button>
</p>
<textarea></textarea>
</body>
</html>سی اس اس
:root {
color-scheme: dark light;
}
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
margin: 1rem;
font-family: system-ui, sans-serif;
}
button {
display: block;
}
جیاس
const pasteButton = document.querySelector('button');
pasteButton.addEventListener('click', async () => {
try {
const text = await navigator.clipboard.readText()
document.querySelector('textarea').value += text;
console.log('Text pasted.');
} catch (error) {
console.log('Failed to read clipboard. Using execCommand instead.');
document.querySelector('textarea').focus();
const result = document.execCommand('paste')
console.log('document.execCommand result: ', result);
}
});