รับเนื้อหาคลิปบอร์ดปัจจุบันไหม [ปิด]


113

ฉันต้องการทราบวิธีที่จะทำให้สคริปต์ของฉันตรวจพบเนื้อหาของคลิปบอร์ดและวางลงในช่องข้อความเมื่อเปิดเพจโดยไม่มีการป้อนข้อมูลจากผู้ใช้ ทำได้ยังไง?


คุณไม่สามารถทราบได้จริงๆว่ามีอะไรอยู่ในคลิปบอร์ดของผู้ใช้เว้นแต่คุณจะใช้แฟลชแบ็กเอนด์บางประเภทเมื่อพวกเขาคัดลอกข้อความ ------- อัปเดต: คำตอบที่ถูกต้องมากขึ้นที่นี่
Naftali aka Neal



คำตอบ:


74

window.clipboardData.getData('Text')จะทำงานในบางเบราว์เซอร์ อย่างไรก็ตามเบราว์เซอร์จำนวนมากที่ใช้งานได้จะแจ้งให้ผู้ใช้ทราบว่าต้องการให้หน้าเว็บเข้าถึงคลิปบอร์ดได้หรือไม่


18
สิ่งนี้จะใช้ได้กับเบราว์เซอร์อื่นที่ไม่ใช่ Internet Explorer หรือไม่
Anderson Green

6
อาจจะไม่. ดูคำถามนี้: stackoverflow.com/questions/400212/…
Dave

7
คุณสามารถตรวจสอบความเข้ากันได้ที่นี่caniuse.com/#search=clipboardData
Sergey Novikov

1
ทางออกที่ดีกว่าคือได้รับจากวัตถุโหนด แต่ไม่ได้รับจากวัตถุหน้าต่าง ดูที่นี่
rplaurindo

ฉันกังวลเกี่ยวกับ Keepass และความปลอดภัย แอพนี้ให้ฉันคัดลอกรหัสผ่านไปที่คลิปบอร์ด
René Winkler

74

ใช้API คลิปบอร์ดใหม่ผ่านnavigator.clipboard. สามารถใช้งานได้ดังนี้:

navigator.clipboard.readText()
  .then(text => {
    console.log('Pasted content: ', text);
  })
  .catch(err => {
    console.error('Failed to read clipboard contents: ', err);
  });

หรือด้วยไวยากรณ์ async:

const text = await navigator.clipboard.readText();

โปรดทราบว่าสิ่งนี้จะแจ้งให้ผู้ใช้ทราบด้วยกล่องโต้ตอบการขออนุญาตดังนั้นจึงไม่มีธุรกิจที่น่าตลก

โค้ดด้านบนจะไม่ทำงานหากถูกเรียกจากคอนโซล ใช้งานได้เฉพาะเมื่อคุณเรียกใช้โค้ดในแท็บที่ใช้งานอยู่ ในการเรียกใช้รหัสจากคอนโซลของคุณคุณสามารถกำหนดระยะหมดเวลาและคลิกในหน้าต่างเว็บไซต์ได้อย่างรวดเร็ว:

setTimeout(async () => {
  const text = await navigator.clipboard.readText();
  console.log(text);
}, 2000);

อ่านเพิ่มเติมเกี่ยวกับการใช้งาน API และในเอกสารพัฒนาซอฟต์แวร์ของ Google

ข้อมูลจำเพาะ


18
โปรดทราบว่าจะทำให้เกิดข้อผิดพลาดเสมอเมื่อเรียกจากคอนโซล แต่จะทำงานกับการกระทำของผู้ใช้โดยตรงเช่นเมื่อคุณกดปุ่มบนหน้า
Klesun

ดูเหมือนว่าจะส่งคืนเฉพาะข้อความธรรมดา ... แม้ว่า Rich Text จะอยู่ในคลิปบอร์ดก็ตาม ฉันจะไปได้อย่างไร \
Michael

มีการเพิ่ม @ Michael การรองรับรูปภาพและอื่น ๆ ใน Chrome เวอร์ชันล่าสุด (76)
iuliu.net

คุณสามารถทดสอบในคอนโซลได้โดยใส่ a setTimeoutแล้วคลิกกลับบนหน้า
edbentley

นั่นใช้ไม่ได้ใน Firefox เลย
Robber

18

คุณสามารถใช้ได้

window.clipboardData.getData('Text')

เพื่อรับเนื้อหาของคลิปบอร์ดของผู้ใช้ใน IE อย่างไรก็ตามในเบราว์เซอร์อื่นคุณอาจต้องใช้แฟลชเพื่อรับเนื้อหาเนื่องจากไม่มีอินเทอร์เฟซมาตรฐานในการเข้าถึงคลิปบอร์ด คุณอาจลองใช้ปลั๊กอินZero Clipboard นี้ก็ได้


1
ลิงค์ใช้งานได้ดี (อีกครั้ง)
stephanos

5
ZeroClipboard เพียง แต่ช่วยให้คุณสามารถคัดลอกไปยังคลิปบอร์ดได้อ่านจากมัน
DSimon

5

ต่อไปนี้จะให้เนื้อหาที่เลือกและอัปเดตคลิปบอร์ด

ผูกรหัสองค์ประกอบกับเหตุการณ์การคัดลอกแล้วรับข้อความที่เลือก คุณสามารถแทนที่หรือแก้ไขข้อความ รับคลิปบอร์ดและตั้งค่าข้อความใหม่ เพื่อให้ได้รูปแบบที่แน่นอนคุณต้องตั้งค่าประเภทเป็น "text / hmtl" คุณสามารถผูกเข้ากับเอกสารแทนองค์ประกอบได้

document.querySelector('element').bind('copy', function(event) {
  var selectedText = window.getSelection().toString(); 
  selectedText = selectedText.replace(/\u200B/g, "");

  clipboardData = event.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
  clipboardData.setData('text/html', selectedText);

  event.preventDefault();
});

25
ยินดีต้อนรับสู่เว็บไซต์นี้! ฉันดีใจที่คุณมีส่วนร่วมด้วยการตอบคำถาม แต่โปรดทราบว่าคำตอบของคุณไม่ได้ตอบคำถามของ OP อย่างแท้จริง คำถามคือการดึงเนื้อหาจากคลิปบอร์ดและวางไว้ที่ใดที่หนึ่งเมื่อเปิดเพจ นอกจากนี้เนื่องจากคำถามไม่มีแท็กjqueryคำตอบที่มี jQuery ควรมีหมายเหตุว่ามีการใช้ไลบรารี (jQuery)
KarelG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.