2016-03-22 29 views
7

Tôi đang cố gắng tạo một chức năng sao chép trong JS thuần túy, do đó không có flash. Vấn đề tôi gặp phải là tôi không muốn hiển thị nút sao chép khi trình duyệt không hỗ trợ sao chép vào clipboard.Cách phát hiện chức năng sao chép vào clipboard trước khi sử dụng nó

Tôi đang sử dụng phương thức document.execCommand('copy') để sao chép vào khay nhớ tạm nhưng hỗ trợ cho việc này không phải là tốt nhất. Ví dụ, safari có hàm execCommand nhưng không hỗ trợ tham số sao chép. Điều này có nghĩa là tôi không thể chỉ đơn giản là kiểm tra xem hàm có tồn tại hay không.

Vì sự hỗ trợ dodgy này, tôi nghĩ rằng tôi sẽ phải đi trong cách phát hiện trình duyệt, giống như github mà tôi đi qua từ nhìn vào một vấn đề zeroclipboard. Here là triển khai mà tôi đã tìm thấy.

Có cách nào chính xác để phát hiện tác nhân người dùng không? Tôi không muốn sử dụng NavigatorID.userAgent vì không được dùng nữa theo MDN.

+0

bạn đã thử 'typeof document.execCommand! == 'undefined''? – Zamboney

+1

Như tôi đã nói trong câu hỏi, safari có hàm document.execCommand nhưng không hỗ trợ tham số 'copy'. Đó là lý do tại sao tôi đang nghĩ đến việc đi xuống con đường phát hiện trình duyệt. Nó cũng không ném một lỗi khi cố gắng sử dụng hàm với tham số đó. – silverlight513

Trả lời

4

tôi nhận thấy rằng trong Safari trước khi phiên bản 10 (thử nghiệm trên 9.0 và 9.1) xây dựng sau

document.execCommand('copy'); 

sẽ trở lại false. Thực tế này có thể được sử dụng để kiểm tra khả năng tương thích trong Safari.

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

Firefox (v48) trả về false và cảnh báo khi tôi thử nó trong bảng điều khiển ngay sau đó. Theo MDN, firefox đã hỗ trợ lệnh này từ v41 - https://developer.mozilla.org/en/docs/Web/API/Document/execCommand – silverlight513

+0

Đúng, có cùng một vấn đề. Điều thú vị là FF v47 và FF v49 trả về 'true'. Có vẻ như một lỗi trong v48. –

Các vấn đề liên quan