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

І тоді виявив, що воно не працює з новою версією Про Пери
Так і народився 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 - замінити на своє значення.