J’ai une application Web, principalement conçue pour fonctionner sur des appareils mobiles. J’ai un bouton qui permet de copier dans le presse-papier du texte transmis. J’utilise javascript pour cela. Mon code fonctionne bien sur tous les appareils mobiles, à l’exception de l’iphone et de l’ipad. Quelqu’un sait quel peut être le problème? Voici mon code:
CopyToClipboard = function(text, fallback){ var $t = $(''); $t.val(text).appendTo('body'); $t.select(); document.execCommand('copy'); $t.remove(); return true; };
J’ai aussi essayé de suivre cette voie, mais aucun résultat, je ne travaille toujours pas sur iphone
function detectIE() { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); if (msie > 0) { // IE 10 or older => return version number return parseInt(ua.subssortingng(msie + 5, ua.indexOf('.', msie)), 10); } var sortingdent = ua.indexOf('Trident/'); if (sortingdent > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); return parseInt(ua.subssortingng(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // IE 12 => return version number return parseInt(ua.subssortingng(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; } function copytext(text) { if (detectIE()) { window.clipboardData.setData('Text', text); } var textField = document.createElement('textarea'); textField.innerText = text; document.body.appendChild(textField); textField.select(); document.execCommand('copy'); window.clipboardData.setData('Text', copytext); textField.remove(); } function copytext(text) { var textField = document.createElement('textarea'); textField.innerText = text; document.body.appendChild(textField); textField.select(); document.execCommand('copy'); $(textField).remove(); }
Essaye ça. Travaille pour moi.
var copy = function(elementId) { var input = document.getElementById(elementId); var isiOSDevice = navigator.userAgent.match(/ipad|iphone/i); if (isiOSDevice) { var editable = input.contentEditable; var readOnly = input.readOnly; input.contentEditable = true; input.readOnly = false; var range = document.createRange(); range.selectNodeContents(input); var selection = window.getSelection(); selection.removeAllRanges(); selection.addRange(range); input.setSelectionRange(0, 999999); input.contentEditable = editable; input.readOnly = readOnly; } else { input.select(); } document.execCommand('copy'); }
Selon CanIUse , Safari sur iOS ne prend pas en charge document.execCommand('copy')
, probablement pour des raisons de sécurité.