記事検索

検索ワードを入力してください。
Sky Tech Blog
ブラウザアプリで​クリップボードへ​データを​格納する​方​法

ブラウザアプリで​クリップボードへ​データを​格納する​方​法

ここでは、ブラウザアプリでクリップボードに格納できるデータの種別や格納方法について説明しています。テキスト、画像、HTMLなどのデータを格納する方法や、複数のデータ種別を同時に格納する例を紹介しています。

クリップボードは、テキストや画像などのデータを一時的に格納することができます。
データを格納するためには、データの種別を示すためのMIMEタイプを指定する必要があります。
この記事では、ブラウザアプリでクリップボードに格納できるデータの種別やデータの格納方法について紹介します。
格納したデータを幅広く利用するために複数のデータ種別を格納する例も紹介します。

ブラウザアプリで​クリップボードに​格納できる​データの​種別

ブラウザアプリでクリップボードに格納できるデータの種別は、ブラウザやブラウザのバージョンによって異なる可能性がありますが、多くのブラウザで共通してサポートされているデータの種別は、以下のようなものがあります。

データ種別ごとの​データ格納方​法

上記データ種別から、テキストや画像をブラウザアプリでクリップボードへ格納する方法をサンプルコードを例に紹介します。

ブラウザアプリで​クリップボードに​データを​格納する​API

ブラウザが提供するクリップボードAPIの一部である「navigator.clipboard」プロパティを使用してクリップボードへデータを格納することができます。
データ種別が「テキスト」のみ:writeText関数で文字列データを格納します。
データ種別が「テキスト」以外:ClipboardItem型で格納するデータを生成して、write関数でデータを格納します。

  • テキスト:text/plain
    改行やスペースなども含む基本的な文字列データのみを格納する方法です。
async function copyText(text:string):Promise<void>{
    await navigator.clipboard.writeText(text);
}
  • 画像:image/png
    MIMEタイプを変更することで他の画像データも保存できます。
async function copyImage(filePath: string): Promise<void> {
    const imageData = new ClipboardItem({
        'image/png': await fetch(filePath).then(async data => await data.blob())
    });
    await navigator.clipboard.write([imageData]);
}
  • HTML:text/html
    HTMLタグでデータを構成することで文字列と画像を一つのデータとして格納することができます。
async function copyHtml(text:string, filePath:string):Promise<void>{
    const imgBlob = await fetch(filePath).then(async data => await data.blob());
    const textData = new ClipboardItem({
        'text/html': new Blob(['<div><p>' + text + '</p><img src=' + imgBlob + 'height=115 width=160/></div>'], { type: 'text/html' })
    });
    await navigator.clipboard.write([textData]);
}

複数の​データ種別を​クリップボードへ​格納する

また、クリップボードには複数のデータ種別を格納することができます。
クリップボードに格納したデータの利用は、貼り付け先のアプリケーションによりますが、複数のデータ種別を格納することで、貼り付け先のアプリケーションが利用しやすいデータを利用できるようになります。

例えば、ExcelではHTMLが格納されているとHTMLが貼り付けられますが、テキストも格納することで、Excelの「形式を選択して貼り付け」からテキストも選択できるようになります。

以下は、[テキスト( text/plain )]と、"テキストと画像"を含んだ[HTML( text/html )]を格納した例です。

async function multiData(text: string, htmlText:string, filePath:string): Promise<void> {
    const imgBlob = await fetch(filePath).then(async data => await data.blob());
    const textData = new ClipboardItem({
        'text/plain': new Blob([text], { type: 'text/plain' }),
        'text/html': new Blob(['<div><p>' + htmlText + '</p><img src=' + imgBlob + 'height=112 width=160/></div>'], { type: 'text/html' })
    });
    await navigator.clipboard.write([textData]);
}

上記データをExcelに貼り付けると下記のようにHTMLが貼り付けられます。

まとめ

今回紹介したのは簡単な例ですが、格納するHTMLの構成や複数のデータ種別を同時に格納することでクリップボードの活用の幅が広がると思います。

なお、格納できるデータ種別はブラウザやブラウザのバージョンによって異なる可能性がありますので、使用する環境で利用可能かご確認ください。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム