Pobrać aktualną zawartość schowka? [Zamknięte]


111

Chciałbym wiedzieć, jak sprawić, by mój skrypt wykrył zawartość schowka i wkleił ją do pola tekstowego po otwarciu strony, bez udziału użytkownika. Jak można to zrobić?


Nie możesz naprawdę wiedzieć, co jest w schowku użytkownika, chyba że użyłeś jakiegoś rodzaju zaplecza flashowego podczas kopiowania tekstu. ------- Aktualizacja: tutaj bardziej poprawna odpowiedź
Naftali aka Neal



Odpowiedzi:


74

window.clipboardData.getData('Text')będzie działać w niektórych przeglądarkach. Jednak wiele przeglądarek, w których to działa, zapyta użytkownika, czy chce, aby strona internetowa miała dostęp do schowka.


17
Czy to zadziała w dowolnej przeglądarce innej niż Internet Explorer?
Anderson Green

6
Prawdopodobnie nie. Zobacz to pytanie: stackoverflow.com/questions/400212/…
Dave

7
Możesz sprawdzić kompatybilność tutaj caniuse.com/#search=clipboardData
Sergey Novikov

1
Lepszym rozwiązaniem jest uzyskanie przez obiekt węzła, ale nie przez obiekt okna. Zobacz tutaj
rplaurindo

Martwię się o Keepass i jego bezpieczeństwo. Aplikacja pozwala mi skopiować moje hasła do schowka.
René Winkler

73

Użyj nowego interfejsu API schowka , za pośrednictwem navigator.clipboard. Można go używać w następujący sposób:

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

Lub ze składnią asynchroniczną:

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

Należy pamiętać, że spowoduje to wyświetlenie użytkownikowi okna dialogowego z prośbą o pozwolenie, więc żadne śmieszne interesy nie są możliwe.

Powyższy kod nie zadziała, jeśli zostanie wywołany z konsoli. Działa tylko wtedy, gdy uruchomisz kod na aktywnej karcie. Aby uruchomić kod z konsoli, możesz ustawić limit czasu i szybko kliknąć w oknie witryny:

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

Przeczytaj więcej na temat interfejsu API i użytkowania w dokumentacji Google dla programistów .

Spec


18
Zauważ, że wywołanie z konsoli zawsze powoduje błąd. Ale to czyni pracę na bezpośrednie działanie użytkownika, jak po naciśnięciu przycisku na stronie.
Klesun

wydaje się, że zwraca to tylko zwykły tekst ... nawet jeśli w schowku znajduje się tekst sformatowany. jak mogę to dostać? \
Michael,

@Michael, obsługa obrazów i innych została właśnie dodana w ostatniej wersji Chrome (76)
iuliu.net

Możesz przetestować w konsoli, zawijając a setTimeout, a następnie klikając z powrotem na stronę.
edbentley

To w ogóle nie działa w Firefoksie.
Robber

18

Możesz użyć

window.clipboardData.getData('Text')

aby pobrać zawartość schowka użytkownika w IE. Jednak w innej przeglądarce może być konieczne użycie Flasha, aby pobrać zawartość, ponieważ nie ma standardowego interfejsu umożliwiającego dostęp do schowka. Może możesz spróbować tej wtyczki Zero Clipboard


1
link działa dobrze (ponownie)
stephanos

5
ZeroClipboard pozwala tylko kopiować do schowka, a nie czytać z niego.
DSimon

4

Poniżej znajdziesz wybraną zawartość, a także zaktualizujesz schowek.

Powiąż identyfikator elementu ze zdarzeniem copy, a następnie pobierz wybrany tekst. Możesz zamienić lub zmodyfikować tekst. Weź schowek i ustaw nowy tekst. Aby uzyskać dokładne formatowanie, musisz ustawić typ jako „text / hmtl”. Możesz również powiązać go z dokumentem zamiast elementu.

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();
});

24
Witamy na tej stronie! Cieszę się, że pomagasz, odpowiadając na pytanie. Ale pamiętaj, że twoja odpowiedź tak naprawdę nie odpowiada na pytanie OP. Pytanie polega na pobieraniu treści ze schowka i wklejaniu jej gdzieś podczas otwierania strony. Ponieważ pytanie nie ma tagu jquery , odpowiedzi z jQuery powinny zawierać informację, że używana jest biblioteka (jQuery).
KarelG
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.