Вставить изображение в форматированный текст (например, Gmail) - PullRequest
15 голосов
/ 18 июня 2011

Я хочу иметь возможность скопировать изображение из буфера обмена, в частности скриншоты, и вставить их прямо в текстовый редактор и / или загрузить этот файл. Мы используем только хром, поэтому он должен работать только для хрома.

http://gmailblog.blogspot.com/2011/06/pasting-images-into-messages-just-got.html

Теперь, когда вы используете последнюю версию Google Chrome, вы можете вставлять изображения прямо из буфера обмена. Поэтому, если вы копируете изображение из Интернета или другого электронного письма, вы можете вставить его прямо в свое сообщение.

Кто-нибудь знает, является ли эта новая функция gmail JavaScript-сценарием, который я смог бы реализовать самостоятельно? Или какое-либо другое понимание этого?

1 Ответ

20 голосов
/ 27 июня 2011

Я верю, что Na7coldwater - это правильно.event.clipboardData используется.Ознакомьтесь со следующим подтверждением концепции:

<html>
<body>
    <div id="rte" contenteditable="true" style="height: 100%; width: 100%; outline: 0; overflow: auto"></div>
    <script type="text/javascript">
        document.getElementById("rte").focus();
        document.body.addEventListener("paste", function(e) {
            for (var i = 0; i < e.clipboardData.items.length; i++) {
                if (e.clipboardData.items[i].kind == "file" && e.clipboardData.items[i].type == "image/png") {
                    // get the blob
                    var imageFile = e.clipboardData.items[i].getAsFile();

                    // read the blob as a data URL
                    var fileReader = new FileReader();
                    fileReader.onloadend = function(e) {
                        // create an image
                        var image = document.createElement("IMG");
                        image.src = this.result;

                        // insert the image
                        var range = window.getSelection().getRangeAt(0);
                        range.insertNode(image);
                        range.collapse(false);

                        // set the selection to after the image
                        var selection = window.getSelection();
                        selection.removeAllRanges();
                        selection.addRange(range);
                    };

                    // TODO: Error Handling!
                    // fileReader.onerror = ...

                    fileReader.readAsDataURL(imageFile);

                    // prevent the default paste action
                    e.preventDefault();

                    // only paste 1 image at a time
                    break;
                }
            }
        });         
    </script>
</body>

Gmail загружает изображение через XMLHttpRequest, а не встраивает его непосредственно в URL-адрес данных.Поиск в Google или SO для загрузки файлов методом перетаскивания должен показать, как этого можно достичь.

Пожалуйста, помните, что это всего лишь подтверждение концепции.Обработка ошибок и код обнаружения браузера / функции не включены.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...