2016-03-22 18 views
7

Próbuję utworzyć funkcję kopiowania w czystym JS, więc bez flashowania. Problem polega na tym, że nie chcę pokazywać przycisku kopiowania, gdy przeglądarka nie obsługuje kopiowania do schowka.Jak wykryć funkcję kopiowania do schowka przed użyciem?

Używam metody document.execCommand('copy') do kopiowania do schowka, ale obsługa tego nie jest najlepsza. Na przykład safari ma funkcję execCommand, ale nie obsługuje parametru kopiowania. Oznacza to, że nie mogę po prostu sprawdzić, czy ta funkcja istnieje.

Z powodu tego podejrzanego wsparcia, myślę, że będę musiał przejść sposób wykrywania przeglądarki, podobnie jak github, z którym natknąłem się na problem z numerem zeroclipboard. Here to implementacja, którą znalazłem.

Czy istnieje właściwy sposób wykrywania agenta użytkownika? Wolałbym nie używać NavigatorID.userAgent, ponieważ jest przestarzałe, zgodnie z MDN.

+0

czy wypróbowałeś 'typeof document.execCommand! == 'undefined''? – Zamboney

+1

Jak powiedziałem w pytaniu, safari ma funkcję document.execCommand, ale nie obsługuje parametru "copy". Dlatego zastanawiam się nad pójściem w dół po wykryciu przeglądarki. Nie powoduje również błędu podczas próby użycia funkcji z tym parametrem. – silverlight513

Odpowiedz

4

zauważyliśmy, że w Safari przed wersji 10 (testowane na 9,0 i 9,1) w następującej budowie

document.execCommand('copy'); 

powróci false. Ten fakt może być używany do sprawdzania zgodności w Safari.

if (false == document.execCommand('copy')) { 
    // Logic for handling the copy functionality in some other way 
} 
+0

Firefox (v48) zwraca false i ostrzeżenie, gdy spróbowałem go w konsoli właśnie wtedy. Według MDN, firefox obsługuje polecenie od wersji 41 - https://developer.mozilla.org/en/docs/Web/API/Document/execCommand – silverlight513

+0

Tak, mam ten sam problem. Ciekawe, że FF v47 i FF v49 zwraca "true". Wygląda jak błąd w wersji 48. –