روش مدرن
با استفاده از Async Clipboard API
برای خواندن متن از کلیپ بورد کاربر به صورت برنامه ریزی شده، به عنوان مثال، پس از کلیک روی دکمه، می توانید از متد readText()
API Async Clipboard استفاده کنید. اگر مجوز خواندن کلیپ بورد هنوز اعطا نشده باشد، فراخوانی 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);
}
});
بیشتر خواندن
نسخه ی نمایشی
HTML
<!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>
CSS
: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;
}
JS
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);
}
});