Güncel pano içeriğini al? [kapalı]


113

Komut dosyamın panonun içeriğini algılamasını ve sayfa açıldığında, kullanıcıdan herhangi bir girdi olmaksızın bir metin alanına yapıştırmasını sağlayacak bir yol öğrenmek istiyorum. Nasıl yapılabilir?


Metni kopyalarken bir tür flash arka uç kullanmadıkça, bir kullanıcının panosunun içinde ne olduğunu gerçekten bilemezsiniz. ------ Güncelleme: Burada daha doğru bir cevap
Naftali aka Neal



Yanıtlar:


74

window.clipboardData.getData('Text')bazı tarayıcılarda çalışacaktır. Ancak, çalıştığı birçok tarayıcı, kullanıcıya web sayfasının panoya erişiminin olmasını isteyip istemediğini soracaktır.


18
Bu, Internet Explorer dışındaki herhangi bir tarayıcıda çalışacak mı?
Anderson Green

6
Muhtemelen değil. Şu soruya bakın: stackoverflow.com/questions/400212/…
Dave,

7
Uyumluluğu buradan kontrol edebilirsiniz caniuse.com/#search=clipboardData
Sergey Novikov

1
Daha iyi bir çözüm, düğüm nesnesi tarafından elde edilmesidir, ancak pencere nesnesi ile değil. Buraya
rplaurindo

Keepass ve güvenliği konusunda endişeliyim. Uygulama parolalarımı panoya kopyalamama izin veriyor.
René Winkler

74

Kullanım yeni pano API aracılığıyla, navigator.clipboard. Şu şekilde kullanılabilir:

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

Veya eşzamansız sözdizimiyle:

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

Bunun kullanıcıya bir izin isteği iletişim kutusu göndereceğini unutmayın, bu nedenle komik bir iş mümkün değildir.

Konsoldan çağrıldığında yukarıdaki kod çalışmayacaktır. Yalnızca kodu etkin bir sekmede çalıştırdığınızda çalışır. Kodu konsolunuzdan çalıştırmak için bir zaman aşımı belirleyebilir ve web sitesi penceresini hızlı bir şekilde tıklayabilirsiniz:

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

Google geliştirici belgelerinde API ve kullanım hakkında daha fazla bilgi edinin .

Teknik Özellikler


18
Konsoldan çağrıldığında her zaman hatayla sonuçlandığını unutmayın. Ama yok , sayfada bir düğmeye bastığınızda gibi doğrudan bir kullanıcı eylemi üzerinde çalışmaya.
Klesun

bu sadece düz metin döndürüyor gibi görünüyor ... panoda zengin metin olsa bile. bunu nasıl edinebilirim? \
Michael

@Michael, resimler ve diğerleri için destek son Chrome sürümüne (76) eklendi
iuliu.net

Konsolda a karakterine sararak ve setTimeoutardından sayfada geri tıklayarak test edebilirsiniz .
edbentley

Bu Firefox'ta hiç çalışmıyor.
Soyguncu

18

Kullanabilirsiniz

window.clipboardData.getData('Text')

IE'de kullanıcının panosunun içeriğini almak için. Ancak, başka bir tarayıcıda, panoya erişmek için standart bir arayüz olmadığından, içeriği almak için flash kullanmanız gerekebilir. Sıfır Clipboard eklentisini deneyebilirsin


1
bağlantı iyi çalışıyor (tekrar)
stephanos

5
ZeroClipboard sadece kopyalamak için izin verir için okuyamaz panoya gelen o.
DSimon

5

Aşağıdakiler size seçilen içeriği ve panoyu güncellemeyi verecektir.

Öğe kimliğini copy olayı ile bağlayın ve ardından seçilen metni alın. Metni değiştirebilir veya değiştirebilirsiniz. Panoyu alın ve yeni metni ayarlayın. Tam biçimlendirmeyi elde etmek için türü "text / hmtl" olarak ayarlamanız gerekir. Ayrıca, öğe yerine belgeye de bağlayabilirsiniz.

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
Bu siteye hoş geldiniz! Bir soruya cevap vererek katkıda bulunduğuna sevindim. Ancak cevabınızın OP'nin sorusuna gerçekten cevap vermediğini lütfen unutmayın. Soru, panodan içerik almak ve bir sayfayı açarken bir yere yapıştırmaktır. Ayrıca, sorunun bir jquery etiketi olmadığından, jQuery ile yanıtlar, bir kitaplığın (jQuery) kullanıldığına dair bir not içermelidir.
KarelG
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.