image-uploader icon indicating copy to clipboard operation
image-uploader copied to clipboard

Chrome Extension

Open zenden2k opened this issue 10 years ago • 27 comments

грубо говоря, должны быть возможности:

Сделать скриншот всей страницы Сделать скриншот фрагмента (выбор прямоугольной области с возможностью прокрутки, в Joxi например прокрутка не работает) Правый клик по картинке -> Загрузить с помощью Image Uploader Выделить текст с картинками -> Правый клик -> Перезалить картинки с помощью Image Uploader И совсем круто было бы если бы получилось реализовать поддержку "Пользовательских элементов меню"

Используя Native Messaging https://developer.chrome.com/extensions/nativeMessaging

zenden2k avatar Mar 29 '15 13:03 zenden2k

Не сказал бы что это вариант... ПО запущенно постоянно, почему бы не реализовать внутренний HTTP/WS сервер и AJAX или те же WS передавать сообщения в ПО и выполнять действия? Плюсом будет тот факт, что AJAX и WS поддерживают все браузеры.

arhangelsoft avatar Mar 29 '15 20:03 arhangelsoft

А если не запущено? Запустить из расширения никак не удастся, кроме как через Native Messaging. Так что наверно придется сделать и то и другое.

zenden2k avatar Mar 29 '15 20:03 zenden2k

Кстати прочитал вашу статью, http://arhangelsoft.ru/2013/06/programmer/почему-подмена-user-agent-для-twebbrowser-не-является-ре/ делаю тут одну штуку http://rawgit.com/zenden2k/image-uploader/master/Docs/api_webbrowser.html как сделать чтобы эмулировалась самая последняя версия?

zenden2k avatar Mar 29 '15 20:03 zenden2k

А если не запущено? Запустить из расширения никак не удастся, кроме как через Native Messaging. Так что наверно придется сделать и то и другое.

когда писал своё расширения, паранойя у хрома зашкаливала сильнее чем у касперского. Странно... обязательно применю Native Messaging.

Кстати прочитал вашу статью

В конце статьи прописано, как заставить рендер рисовать страничку в соотв. с нужным стандартом, для конкретного exe, если тот использовать этот элемент винды.

как сделать чтобы эмулировалась самая последняя версия?

Тут нужно учитывать особенности ОС:

  1. эмулятор можно использовать начиная с IE8. Фактически IE8 нужно будет и поставить пользователю на комп.
  2. Для винды до Vista, IE8 это максимально возможный IE, дальнейшие не поставить из-за древности OS и как следствие нет нужных компонент в ядре винды.
  3. Для 7-и и далее, есть где разгуляться. Эмулируй хоть до 11 IE, соотв. 11 IE должен быть установлен. Нельзя эмулировать то, чего нет.

Определяете версию ОС, определяете версию установленного IE, пишите в реестр правило с нужным кодом эмуляции, перезапускаете ПО и все.

Пойду допишу это в статью...

arhangelsoft avatar Mar 29 '15 21:03 arhangelsoft

Да я уже сделал код https://github.com/zenden2k/image-uploader/blob/master/Source/Func/WinUtils.cpp#L948

zenden2k avatar Mar 29 '15 21:03 zenden2k

Прикольная штука! А доступ к DOM будет? Можно будет нагревать всякие хитро-выдуманные системы анти-спама :) Типа "введите капчу", хоп полноценное окно веб-браузера для ввода...

arhangelsoft avatar Mar 29 '15 21:03 arhangelsoft

Ну как бы диалоговое окно ввода капчи давно есть (AskUserCaptcha) А насчет доступ к DOM, пока не знаю.

Этот класс нужен для другого - для авторизации через OAuth 2.0 на некоторых тупых сайтах.

zenden2k avatar Mar 29 '15 21:03 zenden2k

OAuth вроде бы стандартизирован же. Должны мыть общие методы работы.. ну в общем применение ему найдется))

arhangelsoft avatar Mar 29 '15 21:03 arhangelsoft

Мне бы с событиями разобраться. Вы не знаете случайно, чем отличается у интерфейса IWebBrowser2 OnNavigateComplete2 от OnDocumentComplete? Мне вообще нужно детектить момент смены URL.

zenden2k avatar Mar 29 '15 21:03 zenden2k

1е - когда загружен сам документ. 2е - когда DOM отрисован рендером и доступен для COM. Я бы использовал Navigate.

arhangelsoft avatar Mar 29 '15 22:03 arhangelsoft

Вроде онлайн сервисы считают мой браузер за 11 версию, но javascript ошибки как продолжали сыпаться, так и продолжают.... А, они и в самом IE сыпятся в консоль. Неужто IE так плох, даже 11 версия?

zenden2k avatar Mar 29 '15 22:03 zenden2k

Ну IE любит отличаться в плане недореаализации общепринятых стандартов, потом приходится использовать макро-язык IE чтобы давать ему правильные JS/CSS. С одной стороны виноват IE, с другой, разработчики сайта, которые забыли про IE. И вот непонятно.

В нормальном IE все так же ок? 11 IE сами пробовали?

arhangelsoft avatar Mar 30 '15 04:03 arhangelsoft

Я думаю, что если сделать доступ к DOM, этому классу найдется гораздо более широкое применение

zenden2k avatar Mar 30 '15 10:03 zenden2k

А вот и первый скрипт, использующий новый класс https://github.com/zenden2k/image-uploader/blob/master/Data/Scripts/vk.nut

zenden2k avatar Mar 30 '15 10:03 zenden2k

Лучше отдельным классом парсер DOM из строки (кроссплатформенно).

arhangelsoft avatar Mar 30 '15 12:03 arhangelsoft

Not bad :+1:

arhangelsoft avatar Mar 30 '15 12:03 arhangelsoft

Вот что получилось http://rawgit.com/zenden2k/image-uploader/master/Docs/api_htmldocument.html http://rawgit.com/zenden2k/image-uploader/master/Docs/api_htmlelement.html плюс есть возможность запускать javascript в браузере и получать результат его выполнения

Правда оказалось что у IHTMLInputFileElement свойство value только для чтения ((( я думал это ограничение только для javascript.

zenden2k avatar Mar 30 '15 18:03 zenden2k

надо будет попробовать, однако это сугубо Win фишка. Может все таки парсер HTML?

arhangelsoft avatar Mar 30 '15 21:03 arhangelsoft

Все ж вспомнил ещё один крайне интересный проект... http://phantomjs.org/ может вы его как-то прикрутите? веб-бро кросс-платформенный, без окон без дверей...

arhangelsoft avatar Mar 30 '15 21:03 arhangelsoft

В своё время пытался, да и сейчас где-то лежит, пытался все это в dll завернуть :) Не прокатило.

arhangelsoft avatar Mar 30 '15 21:03 arhangelsoft

Парсер будет https://github.com/zenden2k/image-uploader/issues/80 правда не знаю когда

zenden2k avatar Mar 31 '15 05:03 zenden2k

Я всё таки сделал это! Аплод через Internet Explorer. В интернете писали, что заполнить IHTMLInputFileElement невозможно. Оказалось, что если очень хотеть, то можно. Там такой замысловатый код получился, с хуками, таймерами, доступом через IAccesible. Не знаю, насколько стабильно это будет работать, но всё же как-то работает. https://github.com/zenden2k/image-uploader/blob/master/Data/Scripts/vfl.nut

zenden2k avatar Mar 31 '15 22:03 zenden2k

Там такой замысловатый код получился, с хуками, таймерами, доступом через IAccesible. Не знаю, насколько стабильно это будет работать, но всё же как-то работает.

все проще. Через DOMские интерфейсы это нельзя. А через JS можно на ушах стоять :)

String code = "alert('o_O');"; String result = webBrowser1.Document.InvokeScript("eval",code);

Могу даже дома на Delphi накидать вам демку, пишите произвольный JS и он выполняется.

Можно не eval, а допустим плодить узлы в DOM c кодом, и так же invokeScript вызывать.

arhangelsoft avatar Apr 01 '15 14:04 arhangelsoft

Причем тут это? Заполнить input type=file через JS тем более не получится. А функция runJavaScript есть в API скриптов http://rawgit.com/zenden2k/image-uploader/master/Docs/api_webbrowser.html

zenden2k avatar Apr 01 '15 15:04 zenden2k

Могу написать) как должно выглядить и работать?

arhangelsoft avatar Apr 23 '15 06:04 arhangelsoft

Пока не готово API со стороны программы. Я пока не решил как передавать данные в Image Uploader, через Native Messaging или HTTP, а Native Messaging только для запуска программы и получения номера порта. Наверно будет правильнее сделать через HTTP, чтобы потом можно было легко прикрутить поддержку Firefox

Но грубо говоря, должны быть возможности: Сделать скриншот всей страницы Сделать скриншот фрагмента (выбор прямоугольной области с возможностью прокрутки, в Joxi например прокрутка не работает) Правый клик по картинке -> Загрузить с помощью Image Uploader Выделить текст с картинками -> Правый клик -> Перезалить картинки с помощью Image Uploader И совсем круто было бы если бы получилось реализовать поддержку "Пользовательских элементов меню"

zenden2k avatar Apr 23 '15 08:04 zenden2k

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

Сделать скриншот фрагмента (выбор прямоугольной области с возможностью прокрутки, в Joxi например прокрутка не работает)

Очень просто это делается. Я просто передам в программу скрин страницы целиком, а вы уже там сами крутите её как угодно :dancers:

по хорошему лучше вместо XHR использовать веб-сокеты. Их уже поддерживают все бро, за исключением старых версий осла. Настроку порта отдать пользователю на стороне сервера(IU) и клиента(браузер), т.к. Native Messaging есть только у хрома(гоогловского), остальные не дадут просто взять и запусть EXE да ещё и получить что-то. Разве что мозила через интерфейсные расширения.

И совсем круто было бы если бы получилось реализовать поддержку "Пользовательских элементов меню"

Не смотрел, но вроде бы это статично, не помню уже.

arhangelsoft avatar Apr 23 '15 08:04 arhangelsoft