2016-03-22 15 views
7

Sto provando a creare una funzione di copia in puro JS, quindi nessun flash. Il problema che ho è che non voglio mostrare il pulsante di copia quando il browser non supporta la copia negli appunti.Come rilevare la funzionalità copia negli appunti prima di utilizzarla

Sto usando il metodo document.execCommand('copy') per eseguire la copia negli appunti ma il supporto per questo non è il migliore. Ad esempio, safari ha la funzione execCommand ma non supporta il parametro copy. Ciò significa che non posso semplicemente controllare se la funzione esiste.

A causa di questo supporto dubbia penso che dovrò passare per il rilevamento del browser, proprio come fa Github che mi è capitato di guardare a un problema zeroclipboard. Here è l'implementazione che ho trovato.

Esiste un modo corretto per rilevare l'agente utente? Preferisco non utilizzare NavigatorID.userAgent poiché è deprecato in base a MDN.

+0

hai provato 'typeof document.execCommand! == 'undefined''? – Zamboney

+1

Come ho detto nella domanda, safari ha la funzione document.execCommand ma non supporta il parametro 'copia'. Ecco perché sto pensando di percorrere la strada del rilevamento dei browser. Inoltre non genera un errore quando si tenta di utilizzare la funzione con quel parametro. – silverlight513

risposta

4

ho notato che in Safari prima versione 10 (testato su 9.0 e 9.1) la seguente costruzione

document.execCommand('copy'); 

tornerà false. Questo fatto può essere utilizzato per verificare la compatibilità in Safari.

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

Firefox (v48) restituisce false e un avviso quando l'ho provato nella console proprio in quel momento. Secondo MDN, firefox ha supportato il comando dal v41 - https://developer.mozilla.org/en/docs/Web/API/Document/execCommand – silverlight513

+0

Sì, ha avuto lo stesso problema. Il fatto interessante che FF v47 e FF v49 restituisce 'true'. Sembra un bug nella v48. –