0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptでiOSのクリップボードにコピー-RilsTIL(1h)

Posted at

iOSのクリップボードにコピーする

clipboard_controller.js
import { Controller } from "@hotwired/stimulus";

export default class extends Controller {
  copy(event) {
    event.preventDefault();
    // ここにデータをfetchして加工するプログラムを記述
    copyClipBoard(resData); //取得したデータをcopyClipBoardにわたす。
    
    const copyClipBoard = (targetValue) => {
      if (navigator.clipboard) {
        navigator.clipboard
          .writeText(targetValue)
          .then(() => {
            alert("Successfully copied");
          })
          .catch((err) => {
            console.error("Error:", err);
            fallbackCopyText(targetValue);
          });
      } else {
        console.warn("Clipboard API is not supported.");
        fallbackCopyText(targetValue);
      }
    };
    const fallbackCopyText = (text) => {
      // iOSの互換性のためのフォールバック
      const textarea = document.createElement("textarea");
      textarea.value = text;
      textarea.style.position = "absolute";
      textarea.style.width = "300px";
      textarea.style.height = "400px";
      textarea.style.top = "0";
      textarea.style.right = "0";
      textarea.style.zIndex = "1000";
      document.body.appendChild(textarea);
      textarea.select();
      setTimeout(() => {
        document.body.removeChild(textarea);
      }, "5000");
    };
  }
}
  • WebアプリのボタンでiOSのクリップボードにコピーする方法です。
  • navigator.clipboard.writeText(targetValue)が基本です。
iOSのエラー
Unhandled Promise Rejection: NotAllowedError:
The request is not allowed by the user agent or
the platform in the current context,
possibly because the user denied permission.
  • iOSではエラーになります。
  • とりあえずテキストボックスを表示して自分でコピーしてもらいます。

参考

  • iOSの逃げ方はChatGPTさんです。

Webインスペクタ

  • iPadとMacを繋いで、開発者ツールを開く方法です。

▼ iPad 側の設定

ホーム画面から、[設定]から[Safari]を開く

画面一番下の[詳細]を開き、[Webインスペクタ]をONにする

▼Macを側の設定

Safariを開く

Safariのメニューから、[環境設定]を開く

[詳細]タブをクリックし、[メニューバーに”開発”メニューを表示]にチェックを付ける

[開発]を開き、iPadをクリックする

iPadで許可をタップ

CSSのcalc

calcとzIndex
//bad
textarea.style.right = "calc(50vw-200px)"

//good
textarea.style.right = "calc(50vw - 200px)"

//z-index => zIndex
textarea.style.zIndex = "1000"
  • 小さいことですが、calcのエラーについて、スペースを忘れないように気をつけます。
  • zIndexやclassNameなど他にもJavaScriptの書き方がありそうです。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?