Название: Пересобрал WebKit, а изменений нет... Отправлено: Remyxxl от Апрель 26, 2009, 22:51 Привет всем!
Сделал несколько изменений в WebCore, пересобрал пакет, перекомпилил прогу. Все вроде ок - прошло без ошибок, но изменений я не вижу. Может я что то не до конца доделал? Вот послед. моих действий: Внес изменения в WebCore исходники Запустил: configure -release -platform win32-g++ -no-vcproj -webkit -nomake demos -nomake examples -fast Запустил make (mingw32-make) Дождался пока все прокомпилится - 5 часов ждал! Потом после каждого нового внесения изменений в исходники WebCore, запускал ТОЛЬКО make. Make находил изменения и пересобирал только то что нужно, так что последующие пересборки занимали времени минут 10... По идеи все проходит правильно, только вот изменений я ни вижу ;( Я уже копировал QtWebKit4.dll из lib в bin - результата - 0! Подскажите плизз, что я делаю не верно или чего не доделываю!!! Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: Remyxxl от Апрель 27, 2009, 11:03 Все - получилось!
Что я делал не так, не пойму. Только, что пресобрал еще раз модуль make-ом, запустил свое приложение с webkit-ом и все заработало! Все изменения работают! Походу, что б не создавать новый топик, такой вопрос - хочу дополнить WebKit API несколькими своими классами, но не знаю как ;( Может кто встречал какие доки - кинте плиз ссылочку Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: ритт от Апрель 27, 2009, 18:53 а что за АПИ? может быть, имеет смысл обсудить это с троллями?
Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: Remyxxl от Апрель 27, 2009, 19:50 а что за АПИ? может быть, имеет смысл обсудить это с троллями? Это методы и классы доступа к DOM хтмл документа! Не через яваскрипт. Вообщем то они уже реализуют этот АПИ в qt4.6, однако то что нужно мне, вряд ли будет реализовано официально, так как это изменение, точнее возможность ставит под сомнение безопасность WebKit-а как браузера :( короче, подробности ниже..... Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: Remyxxl от Апрель 27, 2009, 20:00 И так рассказываю, что я менял в WebKit-е, и что у меня получилось (надеюсь может кому-то пригодится).
Пишу я софтину, которая должна автоматом заполнять эл. хтмл форм, в том числе и поле <input type=file>(эл. FileUpload). Как известно доступ к value этого тега только ReadOnly! А так как webkit предоставляет доступ к хтмл эл. только через яваскрипт, то и шансов как либо изменить значение этого атрибута нет! Сутки я потратил на поиски в гугле хоть каких либо солюшинов, позволяющих мне решить эту проблему, но увы ни чего не нашел... Решил я сам раскопать исходники. Программист я еще тот ::) - 2 мес. как работаю с С++ и Qt, поэтому в успехе уверен не был. Но все оказалось не так страшно, и в течении суток, после нескольких экспериментов, путем проб и ошибок, а так же кропотливого изучения кода (для меня кропотливого :)), решения был найдены! Может не самые оптимальные и элегантные - но все же работоспособные и позволяющее изменять значения value для <input type="file"..> из Qt приложения. Судя по выдачам гугла я не первый кто сталкивается с такой проблемой, и как вариант там предлагают использовать IE приложениях. IE позволяет забивать нужные данные через буфер... Но как быть если софт должен быть кроссплатформенным? Поэтому я решил добить WebKit и заставить его работать так как надо мне! Чем и хочу поделится с вами... НО перед тем как я выложу код этого хака, хочу сделать ВАЖНОЕ замечание (хоть и так очевидно, что безопасность WebKit нарушена!) - Не используйте хак в приложениях полноценных веб браузеров! Используйте этот хак только в тех случаях, когда известны адресса загружаемых ресурсов. В самом конце рекомендация, как можно немного обезопасить клиента использующего приложение с таким WebKit-ом. Ну и собственно, что и как нужно менять: Вариант 1: (объясняю оч подробно, что таким новичкам как я было понятно :)) 1. Идем в: cd %QTDIR%\src\3rdparty\webkit\WebCore\html 2. Скачиваем приложенный файл - HTMLInputElement.cpp 3. Заменяем оригинальный HTMLInputElement.cpp на наш, скаченный. 4. Теперь нужно перекомпилить WebKit, для этого: - заходим в %QTDIR% - выполняем команду: configure -release -platform win32-g++ -no-vcproj -webkit -nomake demos -nomake examples -fast - Ждем пока выполнится configure, после чего выполняем make (или mingw32-make ) - Ждем 2~5 часов пока все пересобирется (хочу заметить, что последующие вызовы make будут пересобирать WebKit быстрее - за 10 мин., пока вы не перекофиг. qt снова) Если кому нужен уже скомпиленный QtWebKit4.dll, могу скинуть на мыло, его вес в архиве 4 метра. Все! Запускаем прогу с WebKit и проверяем - создаем файлик - test.html c кодом: Код: <html><head><title>Changing input file</title></head> Теперь можем проверить правильно ли WebKit отправляет файл на сервер: Создаем файлик - test.php с таким кодом: Код: <html><head><title>Test UploadFile</title></head> Важные замечания: Обратите внимание, что после изменения значения value, WebKit все еще отображается текст No file selected. Я сейчас ищу способы и это исправить и как только найду выложу здесь. Но несмотря на это все работает. Что б снизить риск, того что файлы могут быть стырины с компа клиента, использующего софт с "подчиканым" WebKit-ом, можно применить такой прием: 1. Придумать строку ключ, типа YZxeFOWk4XTDRsHDWhy и передовать ее вместе с нужными данными, разделив их напрмер "@". Например: YZxeFOWk4XTDRsHDWhy@c:/images/smile.gif 2. в файле HTMLInputElement добавить проверку на присудствие ключа в переданной строке: Код: //my:////////////////////////////////////////////////////////// ... я не проверял код этого пример на работоспособность, и не претендую на его безупречность, возможны и другие более оптимальные варианты, придумайте сами! ... вот такой мой первый топик на этом форуме ;D, ... а вообще оч хороший форум, я столько всего полезного тут узнал!!! ;) Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: pastor от Апрель 27, 2009, 20:06 Очень интересно! Можно оформить как статью и выложить в ВИКИ
Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: ритт от Апрель 28, 2009, 02:21 мдя...патч был бы полезнее и нагляднее.
> document.getElementById('fileField').value='c:/image/smale.gif' насколько я понимаю, модификация производится именно посредством жс. это недопустимо по стандарту. не понял как связаны фраза "Не через яваскрипт" и код выше... Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: Remyxxl от Апрель 28, 2009, 03:12 мдя...патч был бы полезнее и нагляднее. > document.getElementById('fileField').value='c:/image/smale.gif' насколько я понимаю, модификация производится именно посредством жс. это недопустимо по стандарту. не понял как связаны фраза "Не через яваскрипт" и код выше... Я имел ввиду, что в qt4.6 будут методы, позволяющее обращаться к хтмл ел. не посредственно, ну вот к примеру будет новый класс QtWebElement (http://chaos.troll.no/%7Etavestbo/webkit/domapi/qtwebkit.html). И конечно же хотелось бы иметь возможность изменять значения всех элементов, в том числе и fileupload. Поэтому я и хочу разобраться как самому добавить такие возможности, а пока хак :( Для мой софтины именно эти fileupload теги и надо уметь заполнять автоматом! (я сегодня качнул архив с qt4.6, но увы в webkit-e почему то не нашел новых классов :-[(те что у них в доках указаны)) .. кроется во мне надежда, что возможно новый метод void QWebElement::setAttribute ( const QString & name, const QString & value ) как раз на то и сделан и сможет изменять значения файлаплоада.... Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: Tonal от Апрель 28, 2009, 07:14 ...Пишу я софтину, которая должна автоматом заполнять эл. хтмл форм, в том числе и поле <input type=file>(эл. FileUpload). А зачем для этого вообще браузер нужен?Что мешает сформировать правильный HTTP запрос как все для этого и делают? Смотри например mechanize (http://wwwsearch.sourceforge.net/mechanize/) Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: Remyxxl от Апрель 28, 2009, 10:54 ...Пишу я софтину, которая должна автоматом заполнять эл. хтмл форм, в том числе и поле <input type=file>(эл. FileUpload). А зачем для этого вообще браузер нужен?Что мешает сформировать правильный HTTP запрос как все для этого и делают? Смотри например mechanize (http://wwwsearch.sourceforge.net/mechanize/) Спасибо за ссылочку, очень интересно! буду разбираться. Название: Re: Пересобрал WebKit, а изменений нет... Отправлено: Remyxxl от Апрель 28, 2009, 11:28 ... Мне без браузера ни как не обойтись...А зачем для этого вообще браузер нужен? Что мешает сформировать правильный HTTP запрос как все для этого и делают? ..... Дело в том, что нужно предоставить возможность пользователю определять какой элемент формы к чему относиться, и в подобных приложениях это реализовано через контекст. меню браузера - кликаешь в поле эл. формы, выпадает меню в котором выбираешь, что это за поле - например мыло, урл сайта, логин, пасс и т.д. .... Мало того необходимо предоставить визуалиный контроль правильность автозаполнения форм. Пользователь, врядли согласиться работать в слепую (по крайтей мере пока не будет на 100% уверен, что в авто режиме эта форма заполняется правильно), ведь если его сайт будет отправлен моей софтиной, в тот или иной каталог, неверно (не та категория выбрана, не той длинны или формата описание и в конце концов не все данные заполнены), то из-за этого пользователя могут занести в блеклист и он больше несможет сабмитеть свои ресурсы в данный каталог. Вот, так то... Одним словом я должен сделать софт не уступающий уже существующим, иниче им небудут пользоваться! Я наверное, чудной человек, но я очень хочу вытащить вебмастеров из плена винды и дать им возможность работать в линуксе, но для этого мне надо предложить им спец. софт! На данный момент подобных прог под винду около десяти, а под линукс - 0! |