【javascript】「ブックマークレット」からではテキストをクリップボードにコピーはできませんか?(禁止されているのですか?)
【javascript】「ブックマークレット」からではテキストをクリップボードにコピーはできませんか?(禁止されているのですか?) OS「Windows 10 64bit」 ブラウザー「Waterfox Classic」・「Firefox」(最新版) 「.select();」でテキストエリア内のテキストを選択はできますが、「document.execCommand("copy");」でクリップボードにコピーできません。(無反応) なので、現在は「.select();」→手動でコピー(Ctrl+C)しています。 回答よろしくお願いいたします。
JavaScript | Firefox・14閲覧・50
ベストアンサー
「一応禁止はされてないけど、色々と厄介」といったところです。 本題に入る前に、少しばかり込み入った話になることを説明します。 クリップボードの操作ってめちゃくちゃありふれた機能ですよね。大きめのウェブサイトならだいたい「この記事のURLをコピー」のボタンが設置されています。 しかし、実際のところクリップボードはウェブの世界では微妙な扱いを受けています。ブラウザ環境という閉じた世界を超えて、システムの一部を操作することになるからです(クリップボードはブラウザの機能ではないので)。 という事情で、現状クリップボードの操作には制限がある上に、APIの移行期でもあるためさらに事態がややこしくなっています。 それを踏まえて本題。 懸念事項は主に二つです。 ①ユーザーの命令がないとクリップボードに触れないという制限 ②document.execCommand("copy")そのものが不透明 ①ブラウザ上のスクリプトは好き勝手にクリップボードに触ることが許されていません。ユーザーがボタンをクリックするとか、そういうイベントに紐づけないと操作が無効になります。 残念なことに、ブラウザにとって「ブックマークレットをクリックした」というのはユーザーの命令ではありません。 ですので、例えばselect()とexecCommand("copy")をクリック時に実行するボタン要素を作ってDOMに挿入し、そのボタンを押してコピー、というような手に頼らざるをえません。 ②document.execCommand("copy")は時代遅れと見做されています(まあそう言いながらあちこちで見かけるのですが)。挙動も正直ほかのメソッドに比べて(個人的には)浮いています。 もしexecCommandが何らかの事情でうまく動かない場合は代わりにClipboard APIというものを試してみてください。 https://developer.mozilla.org/ja/docs/Web/API/Clipboard ダメもとですけどね。しかもhttpsじゃないと使えないという制限付き。 最後に、場合によってはどうしようもないこともあることをご理解ください。何かの理由でdocument.execCommand("copy")もClipboard APIも動いてくれないこともあります。 ブックマークレットはある一定度までは非常に便利なツールですが、その性質上できることはかなり限られているツールです。本質的にデベロッパーコンソールでぽちぽちコマンド打ち込むのと同じ次元のことしかできません。 ブックマークレットでの実装をあきらめて、ブラウザ拡張機能を作ってしまうのもありです。面倒に聞こえるかもしれませんが、ブックマークレットでできることなら同じように書けるし、使える機能も飛躍的に増えます。
1人がナイス!しています
質問者からのお礼コメント
回答ありがとうございました。
お礼日時:2020/12/8 22:52