[解決済み] GmailとGoogle Chrome 12+で、クリップボードから画像を貼り付ける機能はどのように動作しますか?
質問
があることに気づきました。 Googleのブログ記事 最新バージョンの Chrome を使用している場合、クリップボードから Gmail メッセージに直接画像を貼り付けることができることに言及しています。 私の使っている Chrome (12.0.742.91 beta-m) で試してみたところ、コントロールキーやコンテキストメニューを使って、とてもうまくいきました。
この動作から、Chrome で使用されている webkit の最新バージョンでは、Javascript の貼り付けイベントで画像を処理することができると推測する必要がありますが、そのような強化に関する文献を見つけることができません。 私が思うに ゼロクリップボード また、ZeroClipboardはクロスブラウザーであり、この投稿ではChromeでのみ動作すると書かれています)。
では、どのような仕組みで、この機能を実現するためにWebkit(またはChrome)のどこが強化されたのでしょうか?
解決方法は?
時間をかけて実験してみました。 それは、ある種、新しい クリップボードAPI仕様 . paste"イベントハンドラを定義し、event.clipboardData.itemsを見て、それらに対してgetAsFile()を呼び出し、Blobを取得することができます。 Blobを取得したら、次のように使用できます。 ファイルリーダー を付けて、その中身を見ることができる。 このようにして、先ほどChromeに貼り付けたもののデータURLを取得することができます。
document.onpaste = function (event) {
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
console.log(JSON.stringify(items)); // might give you mime types
for (var index in items) {
var item = items[index];
if (item.kind === 'file') {
var blob = item.getAsFile();
var reader = new FileReader();
reader.onload = function (event) {
console.log(event.target.result); // data url!
};
reader.readAsDataURL(blob);
}
}
};
データのurlがあれば、ページに画像を表示することができます。 もし代わりにアップロードしたいのであれば、readAsBinaryStringを使うか、または、XHRの中に フォームデータ .
編集:アイテムは、型が
データ転送項目
.
JSON.stringify
はアイテムリストでは動作しないかもしれませんが、アイテム上をループしたときに MIME タイプを取得できるはずです。
関連
-
jsを使った簡単な照明スイッチのコード
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
vue ディレクティブ v-html と v-text
-
[解決済み] 期待される代入または関数呼び出し: 未使用式なし ReactJS
-
[解決済み] Access-Control-Allow-Originヘッダーはどのように機能するのですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] Facebookがブラウザに統合されたDeveloper Toolsを無効にする方法を教えてください。
-
[解決済み] Firefox または Chrome ブラウザから HTTP POST リクエストを手動で送信する方法
-
[解決済み] Trelloはどのようにユーザーのクリップボードにアクセスするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
jsを使った簡単な照明スイッチのコード
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
JavaScriptの配列共通メソッド解説
-
Vueでルートネスティングを実装する例
-
Vueのフォームイベントのデータバインディングの説明
-
[解決済み】awaitは非同期関数でのみ有効です。
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方