Android デバイスでは、「navigator.clipboard.writeText」の前に「alert()」があると、テキストをクリップボードに正常にコピーできないのはなぜですか?
P粉386318086
2023-08-22 19:21:37
<p>Android 上の Chrome で <code>navigator.clipboard.writeText()</code> を使用してテキストをコピーしようとすると、後で警告ボックスを表示しない限り、正常に動作します。一度alert()を表示すると機能しなくなりました。 </p>
<p>たとえば、次のコードは期待どおりに機能します。
<p><br /></p>
<pre class="brush:js;toolbar:false;">function myFunction() {
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value);
}</pre>
<pre class="brush:html;toolbar:false;"><input type="text" value="Hello world" id="myInput" style="width:auto">
<button onclick="myFunction()">copy</button></pre>
<p><br /></p>
<p>ただし、以下のコードは機能せず、コンソールでエラーがスローされず、PC の Chrome では正常に機能しますが、Android では機能しません。 </p>
<p><br /></p>
<pre class="brush:js;toolbar:false;">function myFunction()
{
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value);
alert("テキストが正常にコピーされました")
}</pre>
<pre class="brush:html;toolbar:false;"><input type="text" value="Hello world" id="myInput" style="width:auto" >
<button onclick="myFunction()" >copy</button></pre>
<p><br /></p>
<p>何が起こったか知っている人はいますか?ありがとう。 </p>
理由
navigator.clipboard.writetext
機能しない理由:互換性の問題 : このメソッドは、
document.exec("copy")
メソッドが非推奨になった後に追加されました。 特定のブラウザ バージョンでは、この方法は機能しないため、この方法が利用可能かどうかを確認する必要があります。ドキュメントがフォーカスされていません: ユーザーの操作なしでコンテンツをクリップボードに書き込むと、ブラウザーはリクエストをブロックし、このメソッドの間違いで Promise をスローします。ユーザーがインターネットからロードした文字列 (
ajax
) をコピーしたいと想像してください。このajax
リクエストに時間がかかると、ブラウザーのフォーカスが期限切れになり、私の経験ではコピーを完了できなくなります。不正なアクセス許可: ユーザーは、プライバシーとセキュリティの設定を編集することで、ブラウザが自動的にクリップボードにコピーできないようにすることがあります。コピーする前に、クリップボードへの書き込み権限を確認してください。ただし、ページがアクティブなタブにある場合、
clipboard-write
権限がページに自動的に付与されます。非同期の問題: クリップボードへのコピーは非同期操作であるため、コードの作業が完了するまで待つ必要があります。
HTTP Web サイト: この機能は、サポートされている一部またはすべてのブラウザーの安全なコンテキスト (HTTPS) でのみ使用できます。
Apple Safari の問題: Apple の Clipboard API は、ほとんどの場合、クリップボードに書き込むときに
の代わりに write を使用することをお勧めします。Promise
を期待します。したがって、ClipboardItem
を使用して、Promise
をwrite
メソッドに渡すことができます。writeText
話しやすいです、コード:
を見せてください リーリー ######使用法###:### リーリー重要なヒント: コンソールではなく、ボタンと
onclickイベントを介してテストします。
navigator.clipboard.writeText
メソッドは Promise を返し、コードはその結果を待ちません。次のコードに従って修正すれば問題ありません:
リーリーPromise
メソッドとnavigator.clipboard.writeText
メソッドの詳細については、次のリンクを参照してください:JavaScript.infoに関する約束
MDN でのクリップボードの操作