Pourquoi sur les appareils Android, s'il y a `alert()` avant `navigator.clipboard.writeText`, il ne peut pas réussir à copier le texte dans le presse-papiers ?
P粉386318086
2023-08-22 19:21:37
<p>Lorsque vous essayez de copier du texte à l'aide de <code>navigator.clipboard.writeText()</code> sur Chrome sur Android, cela fonctionne correctement tant que je n'affiche pas la boîte d'alerte par la suite. Une fois que j'affiche une alert(), cela ne fonctionne plus. </p>
<p>Par exemple, le code suivant fonctionne comme prévu : </p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">function maFonction() {
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value);
}</pré>
<pre class="brush:html;toolbar:false;"><input type="text" value="Bonjour tout le monde" id="myInput" style="width:auto">
<bouton onclick="maFonction()">copier</bouton></pre>
<p><br /></p>
<p>Cependant, le code ci-dessous ne fonctionne pas, ne génère aucune erreur dans la console et fonctionne correctement sur Chrome sur PC, mais pas sur Android. </p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">fonction maFonction()
{
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value);
alert("Texte copié avec succès")
}</pré>
<pre class="brush:html;toolbar:false;"><input type="text" value="Bonjour tout le monde" id="myInput" style="width:auto" >
<bouton onclick="maFonction()" >copier</bouton></pre>
<p><br /></p>
<p>Est-ce que quelqu'un sait ce qui s'est passé ? Merci. </p>
Raisons
navigator.clipboard.writetext
Raisons pour lesquelles ça ne marche pas :Problème de compatibilité : cette méthode a été ajoutée plus tard après que la méthode
document.exec("copy")
soit devenue obsolète. Dans certaines versions de navigateur, cette méthode ne fonctionnera pas et vous devez vérifier si cette méthode est disponible.Document non ciblé : si vous écrivez du contenu dans le presse-papiers sans aucune interaction de l'utilisateur, le navigateur bloquera votre demande et générera une erreur dans la promesse de cette méthode. Imaginez qu'un utilisateur souhaite copier une chaîne que vous avez chargée depuis Internet (
ajax
)。如果此ajax
La requête prend un certain temps, le focus du navigateur expirera et, d'après mon expérience, la copie ne peut pas être terminée.Autorisations non autorisées : Parfois, les utilisateurs peuvent empêcher le navigateur de copier automatiquement dans le presse-papiers en modifiant leurs paramètres de confidentialité et de sécurité. Avant de copier, vérifiez les autorisations pour écrire dans le presse-papiers. Cependant, la permission
clipboard-write
est automatiquement accordée à la page lorsqu'elle se trouve dans l'onglet actif.Problèmes asynchrones : La copie dans le presse-papiers est une opération asynchrone et vous devez attendre que votre code termine son travail.
Sites Web HTTP : Cette fonctionnalité n'est disponible que dans un contexte sécurisé (HTTPS), dans certains ou tous les navigateurs pris en charge.
Apple Safari Issue : l'API Presse-papiers d'Apple attend un
dans la plupart des casPromise
在写入剪贴板时。因此,我们可以使用ClipboardItem
将一个Promise
传递给write
方法。我建议您使用 write 而不是writeText
Facile à parler, montre-moi Code :
Utilisation :
IMPORTANT : Test via les boutons et les
onclick
événements, pas dans la console.Parce que la méthode
navigator.clipboard.writeText
renvoie une Promesse et que votre code n'attend pas son résultat.Si vous le corrigez selon le code ci-dessous, tout devrait bien se passer :
Pour plus d'informations sur les méthodes
Promesse
etPromise
和navigator.clipboard.writeText
, veuillez visiter le lien suivant :Promesse sur JavaScript.info
Interagir avec le presse-papiers sur MDN