本篇是 Chrome Extension 的第六篇入門文章。
在本文中將專門介紹 ChrExt 的前端剪貼簿解決方案。
和在一般網頁裡一樣, 在 ChrExt 裡同樣可以使用剪貼簿功能。在本文中介紹的情境是將當前網頁裡的資料擷取出來之後, 直接放到前端用戶的剪貼簿裡。例如, 假設網頁內容是一筆訂單的細目, 那麼我們可以擷出訂單內容 (例如「藍芽耳機」)、數量、單價和訂單編號後, 在各項資訊中夾入 TAB 字元, 再塞進剪貼簿裡, 然後就可以貼進 Excel 裡。這樣我們就不需要一項一項複製貼上了。特別是對於重複進行的人工作業, 這樣做可以省下大量的時間。
Function
我已經寫好主要的程式如下:
//程式一
function copyToClipboard(str='', mimeType='text', isDebugging=true) {
document.oncopy = function(event) {
event.clipboardData.setData(mimeType, str);
event.preventDefault();
};
try{
let successful = document.execCommand('copy', false, null);
let msg = successful ? 'successful' : 'unsuccessful';
if (isDebugging)
console.log('Copying object: ' + msg);
if (!successful){
navigator.clipboard.writeText(str).then(
function() {
if (isDebugging)
console.log('Object copied into clipboard.')
},
function() {
if (isDebugging)
console.warn('Failed to copy.')
}
);
}
} catch(ex){ console.warn('Clipboard Exeption.\n'+ex )}
} // of copyToClipboard()
在本文描述的適用情境中, 以上程式直接拿去套用呼叫即可。
manifest.json
在上述程式中, 雖然並沒有用到 Chrome 的內建功能, 但是仍然必須在 manifest.json 進行宣告, 才能使存取剪貼簿:
"permissions": [
"tts",
"tabs",
"storage",
"clipboardRead",
"clipboardWrite"
]
如上, 必須在 "permissions" 區段中加上 "clipboardRead" 和 "clipboardWrite" 兩個項目 (特別是後者), 程式一裡的 copyToClipboard() 函式才有作用。呼叫這個函式之後, 你的資料就會出現在剪貼簿裡了。
在任何情境下, 如果你需要清空剪貼簿, 呼叫 copyToClipboard() 但不代入任何參數即可。
參考:
- [入門] Chrome Extension 入門 #1
- [入門] Chrome Extension 入門 #2
- [入門] Chrome Extension 入門 #3
- [入門] Chrome Extension 入門 #4
- [入門] Chrome Extension 入門 #5
- [入門] Chrome Extension 入門 #6
- [入門] Chrome Extension 入門 #7
- Manifest V3 migration checklist