Htmlzclip повернення копіювання тексту з форматуванням в оперу - дев’ятий біт

Htmlzclip повернення копіювання тексту з форматуванням в оперу - дев'ятий біт
Раніше я на нашому форумі писав про розширення (htm2clip) для Про Пери, що дозволяє копіювати фрагмент сторінки зі збереженням його оформлення. З того моменту я майже ним не користувався, поки недавно мені не знадобилося швидко скопіювати шматок сайту, зберігши його форматування ...

І тоді виявив, що воно не працює з новою версією Про Пери

Так і народився htmlZclip.
Основні його переваги перед htm2clip:

  • працює на нових версіях Про Пери
  • робить це в 1,7 разів швидше

Мені від htm2clip потрібна була тільки функція копіювання (вставкою не користувався), тому htmlZclip може тільки копіювати (форматованої вставки немає).

Ставиться він практично також, як і htm2clip. Потрібно скопіювати 2 файли, і прописати в браузері MIME тип.

На цьому звичайний користувач може піти і зайнятися своїми справами, але, якщо ви себе таким не вважаєте, і зайва подробиця в дрібницях і недомовленість в суті того, що відбувається наведеної вище інструкції вам не по нутру, то сміливо вивчайте статтю до кінця.

Я не буду тут говорити, що копіюючи мій 'standard_menu.ini' ви могли затерти свою менюшку, і що краще замість цього вставити новий елемент в своє меню. Раз ви це Новомосковскете, вам це повинно бути відомо.

У цьому розділі я б хотів сказати, наприклад, те, що кидаючи до себе 'htmlZclip.exe' і прописуючи до нього MIME, ви робите в своєму браузері пристойну дірку відбійним молотком. Якщо залишити все як є, то браузер, зустрівши на будь-якому сайті об'єкт з MIME text / htmlZclip. відразу відішле його в 'htmlZclip.exe', а той, у свою чергу, помістить його в буфер обміну ...

Щоб цього не сталося, досить замінити MIME на яку-небудь нісенітницю, наприклад text / trali-vali; eli; sandali. MIME слід замінити в браузері і в скрипті (він прописаний на початку скрипта, можна знайти пошуком; ваш К.О.) в 'standard_menu.ini'.

Можна прописати клавіатурне скорочення в секцію Application свого 'standard_keyboard.ini', наприклад для поєднання Ctrl + Alt + C:

Або прописати те ж саме в GUI: Розширені налаштування -> Управління. Тільки не забудьте видалити зовнішні лапки.

В директорії 'src \' архіву знаходяться всі вихідні. Вихідні тексти містять шапку, в якій вказана їх версія
(Формат - 'htmlZclip v<версия оперы>.<номер версии htmlZclip для данной версии оперы>'), А також дані всі необхідні посилання:

Спочатку варто подивитися, що саме заноситься в буфер обміну при копіюванні, наприклад в IE:

Потім краще почитати опис на MSDN точний опис формату заголовка HTML Clipboard Format (CF_HTML).

Далі можна подивитися кілька реалізацій копіювання в буфер обміну CF_HTML:

htmlZclp.js

Цей код, після упаковки в YUI Compressor переноситься в 'standard_menu.ini'.

encodeBase64full

htmlZclip.exe

Воно написано на C. і в зібраному вигляді займає 3 072 Байа, на відміну від htm2clip - Delphi і 14 336 байт.

Якщо загляньте в файл 'htmlZclip.c', то в середині функції wWMain побачите кумедну конструкцію, починає з '(hText ='. Пропоную самостійно розібратися з тим, як вона працює, і лише скажу, що це дуже зручний спосіб перевірки відпрацювання WinAPI функцій .

Треба тільки помолитися перед компіляцією: деякі компілятори при оптимізації коду можуть переставити виклики функцій так, що вони будуть викликатися не в потрібному нам порядку (.), І програма працювати не буде!

Якщо ж ви вважаєте себе параноїком, то сміливо переписуйте нормально цю ділянку коду, доповнивши його відсутніми перевірками, додатковими циклами і повідомленнями користувачеві, що проге стало погано. Ах так, мало не забув, ще можете для заспокоєння душі прибрати _GS_CHECK_OFF.

Як це працює

Після формування CF_HTML (даних відповідно до цього формату), він передається у вигляді DataURL як src новому iframe.

Далі браузер, бачачи поява нового об'єкта, по MIME визначає що йому робити. У нашому випадку браузер створює в директорії для тимчасових файлів новий файл і записує в нього наш CF_HTML. Потім шлях до тимчасового файлу передається в 'htmlZclip.exe' в якості опції запуску.

І, в кінці, 'htmlZclip.exe' переписує вміст тимчасового файлу в буфер обміну із зазначенням формату 'HTML Format'.

Google стиснення JS

І ось що отримаємо: lol.

Шляхи JIT-компіляції несповідимі

Вирішивши, що зміна коду для формування заголовка CF_HTML зробить htmlZclip повільніше, ніж htm2clip, став міняти код. Яке ж було моє здивування, коли новий 'htmlZclip.js' став працювати на 8% швидше, ніж старий 8-O. Мабуть, не дарма, коли його модифікував, постійно думав про продуктивність.

Підпис файлу розміром з сам файл

Зазвичай в релізи своїх проектів я додаю цифровий підпис.

Цього разу мені цього робити не захотілося. Посудіть самі, файл 'htmlZclip.exe' розміром 3 КБ, після підписування зі штампом часу став важити 8 КБ.

Через що htm2clip перестав працювати

Тут видно, що доданий тільки що об'єкт відразу віддаляється. У старій Про пере виконання даної конструкції було реалізовано не дуже ефективно і призводило до перемальовуванні. У новій версії Про Пери прибрали цей недолік.

Але стривайте, відсутність відтворення означає, що не буде іншого об'єкт, і далі нічого працювати не буде (див. Вище Як це працює). Тому в htmlZclip припущення про обов'язкову відтворення я замінив на припущення про те, що отрисовка точно повинна відбутися за 5 секунд:

ZKyl
Велике спасибі за оперативність.
скрипт скачав, програму налаштував.
На жаль, не працює

Перевіряв на 11.01, 11.52 і 11.60
Після виділення тексту на дек. секунд з'являється прогрес-бар (явно щось відбувається), але текст в буфері не виникає.

ZKyl,
ще раз дякую.

Прописати повний шлях до скрипта неможливо; вказується адже шлях до папки ujs-скриптів.

Мабуть, доведеться просто відвикнути від цієї зручної фичи.

До речі, частковий workaround для збереження форматування: є скрипт view-selection-source.js
(Показує виділений фрагмент в html-форматі).

Kiril__777,
Швидше за все Ви раніше слідуючи пораді з розділу «допілівать установку» змінили MIME «text / htmlZclip» на свій.
У новому standard_menu.ini MIME - стандартний ( «text / htmlZclip»), тому Вам знову треба замінити його на свій варіант.

ZKyl, спасибі за наводку

Хотів поцікавитися, а можете зробити кнопку «Копіювати в Evernote»? Його стандартний додаток копіює з опери есесно без форматування.

ZKyl, зовсім недавно з'явився питання:
чи не можна навчити htmlZclip.exe копіювати текст при виділенні так, щоб потім можна було вставити його в блокнот?

все інше відмінно працює

Вибачте за затримку, готувався до захисту дисертації.

> Хотів поцікавитися, а можете зробити кнопку «Копіювати в Evernote»? Його стандартний додаток копіює з опери есесно без форматування.
Чи не користувався Evernote, завжди вистачало вбудованого «Копіювати в замітки». Краще зверніться до розробників Evernote з посиланням на htmlZclip.

Шановний ZKyl, днями вийшла Опера 12.1 і в ній більше не працює ваша чудова примочка: `(

І в 4-му пункті установки:
натиснемо Ctrl + F12. відкриємо вкладку 'Розширені', зайдемо в 'Завантаження' (ліворуч), натиснемо кнопку 'Додати ...',
у вікні вказуємо в полі MIME-тип text / htmlZclip ...
знову htmlZclip - замінити на своє значення.