для копирования html кода письма нажмите кнопку скопировать html в буфер внизу
Копирование полной Html-страницы в буфер обмена
В моем приложении c# я генерирую html, который используется для визуализации данных, чтобы скопировать его в буфер обмена. Я нашел много ссылок, объясняющих, как скопировать html в буфер обмена, но все они говорят о копировании фрагментов, а не полных HTML-документов.
Я следовал этому учебнику и экспериментировал с числами внутри описания, но не смог скопировать мой полный html также без копирования части описания. мне нужен html, чтобы вставить его, например, в электронную почту, чтобы получить хорошо отформатированный текст.
так может ли кто-нибудь сказать мне, какой самый простой способ решить эту проблему?
я говорю о настольном приложении, и именно так я создаю html, который хочу скопировать в буфер обмена (-1-это просто пример. я попробовал много других номеров вместо этого):
3 ответа
Я делаю несколько предположений из вашего вопроса(i.e) у вас есть настольное приложение c#, которое должно получить содержимое HTML-страницы и проанализировать его в приложении C#. Если это так, то код будет
Переменная reply может быть проанализирована по мере необходимости.
Вместо того, чтобы просто установить буфер обмена в текстовую строку, вы должны создать DataObject и установить, что, так что все, что получает данные могут прочитать кусок он поддерживает.
Кроме того, вы можете щелкнуть правой кнопкой мыши страницу в вашем любимом браузере и view-source и скопировать полный HTML-код страницы там. Но есть gotcha! при таком подходе. Как Google, так и Firefox режимы просмотра исходного кода будут обертывать HTML-код страницы в номера строк. В буфере буфера обмена номера строк на самом деле код HTML-оболочки, который вам придется удалить. IE этого не делает.
Добавление HTML-кода в буфер обмена данными с помощью Visual C++
В этой статье показано, как добавить код Языка разметки Hypertext (HTML) в буфер обмена Windows Microsoft с помощью Visual C++.
Оригинальная версия продукта: Visual C++
Исходный номер КБ: 274308
Сводка
В этой статье содержится пример функции, которую можно использовать в приложениях для упрощения процесса добавления HTML-кода в буфер обмена.
Формат буфера обмена HTML
HTML имеет собственный формат буфера обмена данными под названием HTML Format (CF_HTML), который можно использовать для предоставления данных другим приложениям, таким как Excel, Word или другим Office приложениям.
CF_HTML полностью текстовый формат, который включает описание, контекст и фрагмент в этом контексте. При создании данных для отправки в буфер обмена данными необходимо включить описание данных, чтобы указать версию буфера обмена и смещения для контекста и фрагмента. Вычисление смещений может быть сложной частью. Однако для упрощения этой задачи можно использовать следующую процедуру.
Пример кода
При использовании этой функции для копирования фрагмента кода HTML в буфер обмена может выглядеть следующий пример:
Дополнительные сведения
Использование подхода, который отправляет HTML-код в буфер обмена данными, может быть особенно полезным для Office клиентов автоматизации. Например, если у вас есть клиент автоматизации, который должен создавать отформатированные данные для ячеек в Excel или абзацах в Word, можно создать данные в HTML-коде, отправить их в буфер обмена, а затем ввести в приложение. С помощью этого метода можно уменьшить количество вызовов вне процесса клиенту Automation.
Копируем исходный код без нумерации строк
Бывает при выводе информации требуется ее декорировать для лучшего восприятия, нередко оформление сопровождается в том числе и текстом. При выделении и копировании этой информации, оформление копировать не нужно, т.к. нужна только сама информация, и желательно в исходном виде. То есть при копировании часть выделенного текста не должна попадать в буфер обмена.
В моем случае это исходный код, который сопровождается нумерацией строк, так нагляднее и есть возможность сослаться на строку кода. Однако, если мы хотим скопировать часть кода, то он должен копироваться без номера строки.
Многие highlighter’ы этим грешат, при копировании кода копируют в том числе и номера строк. Выходят из ситуации по разному: либо используют хитрую верстку, при которой возможно несовпадении нумерации со строками (можно заметить на github например), или используют специальную кнопку, которая показывает в отдельном окне код без форматирования. Мне показались эти подходы неудовлетворительными, потому решил найти другое решение.
В данной заметке я опишу решение, к которому в итоге пришел. Решение, конечно, частное, но может кому то оказаться полезным в решении собственных задач.
Начнем с того, что кратко пройдемся по возможным вариантам решения.
Способ первый, очевидный.
Самый простой и очевидный способ, это сделать нумерованный список, где каждый элемент списка это отдельная строка. Основной плюс у этого подхода: все просто и не нужно задумываться даже о нумерации. Но при этом нельзя управлять форматом нумерации, нельзя позиционировать маркер (номер строки) и вообще как-то его декорировать. К тому же Internet Explorer и Firefox копируют текст вместе с маркером.
Собственно проблема с копированием перечеркивает возможность использования этого подхода.
Второй способ, менее очевидный.
Второе что приходит на ум — использовать генерируемый контент. Можно даже смирится с тем, что в старых IE это не будет работать (на этот случай можно, конечно, сделать fallback). Но беда в том, что Internet Explorer и Opera копируют весь видимый текст, в том числе и генерируемый контент.
Сложно сказать правы ли разработчики Internet Explorer/Opera или же правы разработчики webkit и Firefox относительно копирования генерируемого контента. Одно можно сказать с уверенностью, что метод не подходит.
Небольшая ремарка
Способ третий, ненормальный.
Вот, в принципе, и все.
В итоге имеем следующий html для блока с исходным кодом (переводы строк для наглядности, целевой html должен быть без них, иначе можем получить ненужные переводы строк при копировании):
И CSS для этого «безобразия»:
Демо на примере исходного кода atomjs (надеюсь TheShock не против 😉
Html-кода много, но он генерируется javascript’ом (свой highlighter).
Тестировалось под Chrome/Safari, Firefox 3.6, Opera 11, IE7-9 (переключением режимов в IE9 RC).
На что стоит обратить внимание
UPDATE
Найден workaroud чтобы при вставке в Word/Excel не вставлялись поля ввода. Чтобы этого добиться для нужно задать несуществующее значение атрибута type. В таком случае браузеры игнорируют атрибут и поле имеет тип по умолчанию, то есть type=«text», а при копировании (или вставке) не описаны сценарии как поступать с полями неизвестного типа — в итоге поле игнорируется. Так что код можно спокойно вставлять, например, в Word. При этом если код копируется из Chrome/Safari или из IE, то он будет вставлен с раскраской (webkit так же копирует и фон, а IE копирует без фона), что может в ряде случаев может оказаться полезным.
Копирование текста в буфер обмена по клику
Одна вещь, что часто возникает при создании сайтов, это возможность копирования некоторого текста в буфер обмена без выбора пользователем или нажатия соответствующей комбинации, которую можно воспроизвести на клавиатуре. С этим действием, после установки, то само копирование знаков или текста, что прописал веб мастер, что идет на прямую в буфер обмена, не будет уж таким затруднительным, как многие считают. Он не должен требовать десятков шагов для настройки, что был усовершенствован, и как видите, все происходит мгновенно.
Стили идут под дизайн кнопок:
#kildsan <
display: inline-block;
font-size: 14px;
font-weight: 400;
line-height: 2;
cursor:pointer;
border: 1px solid transparent;
border-radius: 4px
>
#kildsan <
color: #fffbfb;
padding: 8px 15px;
background-color: #2c5590;
border-color: #cac6c6;
>
#kildsan <
background-color: #4179ca;
border-color: #c1bdbd;
color: #fff;
>
#kildsan:hover <
color: #fff;
background-color: #337ab7;
border-color: #2e6da4
>
Довольно распространенный вариант использования копирование контента из другого элемента. Кроме того, если вы работаете с приложениями с одной страницей, вы можете более точно управлять циклом и на совершенно других.
На заметку: Стилистика, что здесь предоставлена, не как не влияет на функцию, так как она идет под кнопки. Просто сделано под Demo страницу для пользователя, при проверки материала.
Также, если у вас не конструктор uCoz, то нужно подключить библиотеку для корректной работы.
Вырезать и копировать в буффер с помощью JavaScript
Начиная с IE10 добавлена поддержка команд «Копировать» и «Вырезать» с помощью метода Document.execCommand(). Так же эти методы доступны в Chrome начиная с версии 43.
Любой текст выделенный в браузере при выполнении одной из этих команд будет скопирован или вырезан в буфер обмена пользователя. Это позволяет предложить пользователю простой метод выделить часть текста и скопировать в буфер обмена.
Это становится крайне полезным в сочетании с API программного выделения текста, что бы задать что скопировать в буфер. Примеры будут рассмотрены в этой статье.
Примеры
Для примера, давайте добавим кнопку которая скопирует email адрес в буфер обмена.
Мы добавим email адрес, в наш HTML, с кнопкой клик по которой будет инициировать копирование email:
Тогда, в наш JavaScript, мы добавим обработчик клика по кнопке, который выделит email из содержимого ссылки js-emaillink, выполнит команду копирования, так что бы адрес электронной почты оказался в буфере пользователя и после этого снять выделение с электронной почты, так что пользователь даже не увидит выделение.
Здесь используется метод API выделения, window.getSelection(), что бы программно выделить текст внутри ссылки, который мы хотим скопировать в буфер обмена пользователя. После вызова document.execCommand() мы можем снять выделение с помощью window.getSelection().removeAllRanges().
Если вы хотите проверить что все прошло успешно, то вы можете рассмотреть результат возвращаемый функцией document.execCommand(). Результат будет false если функция не поддерживается или отключена. Мы «обвернули» execCommand() в try. catch, т.к. команды «вырезать» и «копировать» в некоторых случаях могут вернуть ошибку.
Команда «вырезать» может быть использована для текстовых полей ввода, там, где вы хотите удалить текст и поместить этот текст в буфер.
Использование textarea и кнопки:
Мы можем сделать следующее, что бы «вырезать» содержимое:
queryCommandSupported и queryCommandEnabled
Перед вызовом document.execCommand() вы должны убедится что эти API поддерживаются с помощью document.queryCommandSupported(). В примере выше, мы могли бы заблокировать кнопку, по результатам проверки совместимости, например, так:
Отличие между queryCommandSupported() и queryCommandEnabled() в том, что команды «копировать» и «вырезать» могут поддерживаться браузером, но если текст не выделен, то они не будут доступны. Это удобно в том случае если вы не выбрали фрагмент текста программно и хотите что бы команда отработала ожидаемо, в противном случае показать сообщение пользователю.
Совместимость с браузерами
IE 10+, Chrome 43+ и Opera 29+
Firefox поддерживает данные функции, но требует изменения настроек (см. тут) (Примечание переводчика: при этом довольно давно. Была даже функция чтения из буфера обмена, заблокированная по умолчанию в целях безопасности). Без этого Firefox вернет ошибку.
- для кодирования букв а б в г решили использовать неравномерный двоичный код удовлетворяющий
- для мероприятий вида прием и перевод должен быть заполнен код выполняемой функции по окз