Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Вниз

Как сделать фильтрацию содержимого в TWebBrowser или TEmbeddedWB?   Найти похожие ветки 

 
sergey2   (2003-05-15 01:22) [0]

Когда-то задавал подобный вопрос насчет TWebBrowser"а. Посоветовали установить TEmbeddedWB.

Поставил я его. Но все таки как реализовать фильтрацию содержимого? Например я загружаю определенную страничку. Нужно "выключить" загрузку отдельных ее элементов (рисунков и пр.) в зависимости от их URL"a.


 
Ihor Osov'yak   (2003-05-15 01:44) [1]

В зависимости от урла - то app, имхо..


 
sergey2   (2003-05-15 02:05) [2]

2 Ihor Osov"yak - не понял... Можно попонятнее?

Думаю что это все-таки как-то должно делаться. Например в
некоторых надстройках над IE (MyIE) есть такая штука как фильтрация сожержимого... Значит это как-то можно сделать...
Можно по - подробнее?


 
nikkie   (2003-05-15 02:14) [3]

BeforeNavigate2...
Cancel := True;


 
Ihor Osov'yak   (2003-05-15 02:24) [4]

2 sergey2 (15.05.03 02:05)

Это когда картинки запретить, или музыку... Или видео. Если в зависимости от урла - то есть, как я понял - картинку, лежащую по одному урлу - грузим, по другому - нет - то только app - асинхронные настраивыемые протоколы - см msdn - Asynchronous Pluggable Protocols


 
sergey2   (2003-05-15 02:44) [5]

2 nikkie Таким способом я могу отключать фреймы и IFRAME, ну может еще что-то, но при этом странички целиком будут отключаться.
А если например есть страничка а на ней куча рисунков, одни из них я хочу отключить а другие оставить...?

2 Ihor Osov"yak Вобщем вот этот вариант меня и интересует

>лежащую по одному урлу - грузим, по другому - нет - то только >app - асинхронные настраивыемые протоколы - см msdn - >Asynchronous Pluggable Protocols

Ну что ж. Зайду, поищу и почитаю.... Но нет ли у тебя случайно ссылки где можно скачать исходник подходящего примера?


 
Ihor Osov'yak   (2003-05-15 02:50) [6]

на iedelphi лежал слегка глючавый.. У меня есть вполне рабочий.. Но в публичном месте выложить еще руки не дошли. Моя реализация - по сути то же, что пример от iedelphi - то есть не фильтр, что тебе надо, а своего рода снифер.. Но переделать под прои цели особого труда не составит... А что такое делаешь?


 
Ihor Osov'yak   (2003-05-15 03:18) [7]

Блин, закачка в кладовку чего-то не работает.. Поутру сделаю повторную попытку...


 
LOX   (2003-05-15 07:15) [8]


> sergey2 (15.05.03 01:22)

Я скачал а какой файл ставить надо?


 
Ihor Osov'yak   (2003-05-15 13:26) [9]

Выложено.

http://www.delphimaster.ru/download/programs.html
в тч
http://www.delphimaster.ru/cgi-bin/download.pl?get=1052990553&n=1
http://www.delphimaster.ru/download/1197_exe.zip


 
nikkie   (2003-05-15 14:00) [10]

>sergey2
>Таким способом я могу отключать фреймы и IFRAME
Cорри, мало думал, прежде чем ответить :)

Можно сделать свой http-прокси. Я может чего непонимаю, но мне кажется, что это будет проще, чем через APP.


 
sergey2   (2003-05-15 14:26) [11]

2 nikkie Я надеялся что существует возможность сделать это попроще. Думал что может существует или как-то можно сделать event, который дает мне УРЛ элемента странички, который браузер хочет грузить, а я ему типа его разрешаю или запрещаю загружать... Но вижу что с этим будет намного сложнее.
А писать прокси я никогда не пробовал. Хотя иметь пример исходника прокси было бы неплохо.

Вобщем щас качаю то, что Ihor Osov"yak выложил, а там буду разбираться.


 
Ihor Osov'yak   (2003-05-15 15:00) [12]

2 nikkie © (15.05.03 14:00)

Да, пожалуй проще.. Что-то в полемике забыл о таком варианте..


 
nikkie   (2003-05-15 17:43) [13]

На euromind/iedelphi собственно примера APP нет, там ссылка на http://groups.yahoo.com/group/delphi-webbrowser/files/ , где есть несколько примеров - я их пару недель назад скачал, теперь вот руки дошли посмотреть...

Как я понял, там примеры из трех источников:
1. Некто безымянный немецко-язычный (файл PlugProt.pas, протокол называется cdbook, демо отсутствует, в работе соответственно я не видел, но написано очень аккуратно)
2. Linds


 
Ihor Osov'yak   (2003-05-15 20:07) [14]

http://www.euromind.com/iedelphi/app.htm
Глюк там один - в конечном итоге там вызывается "оригинальные" протоколы - через CoCreateInstance, см procedure TProtocol.Initialize;

Так вот, проблема в том, что при загрузке некоторых картинок запрос на создание протокола, т.е. вызов TProtocol.Initialize происходит в потоке, где COM не проинициализирован.... Это трудно обьяснить почему - идет в разрез со всеми канонами про апартменты и тд и тп - но наверно MS позволила себе маленькую вольность.. Когда я впервые с этим столкнулся, то в фидо поднимал шум по этому поводу, тогда даже Тенцер привел цитату с msdn, где вскользь упоминается, что с целью поднятия производительности такая вольность может быть для inproc серверов - если я правильно ту цитату понял.. Но нам от этого не легше.. Сами мы COM инициализиировать в потоке не можем - ибо поток порожденный не нами и естественно его кончину контролировать трудно, чтобы деинициализацию COM сделать..

... Собственно в чем там суть моего решения - я делал создание обьекта через urlmon_DllGetClassObject - это нормально работает и без инициализации COM.. А в остальном - почти полный аналог от
Linds° Larsen - если не считать того момента, что там у меня немного туману напущено вокруг определения того, какой собственно активХ соотв. протокол создал - иногда все же нужно..




 
sergey2   (2003-05-15 22:04) [15]

2 nikkie Не могу "залезть" по той ссылке что ты оставил. Не пускает...

You are not a member of the group delphi-webbrowser.

Если тебя не затруднит, пожалуйста скинь мне ProxyFilter.zip на мыло или куда-нить еще (например в кладовку).

И еще: Что мне нужно сделать чтобы меня пустили в эту яхо-группу?


 
Ihor Osov'yak   (2003-05-15 22:46) [16]

Join This Group! есть там такие волшебные слова, если мне память не изменяет..


 
nikkie   (2003-05-15 23:57) [17]

>Ihor Osov"yak
Спасибо за разъяснения.

Да уж, по поводу скачать я лопухнулся - искал, что скачать на странице http://www.euromind.com/iedelphi/app.htm , а линки на zip-файлы расположены в подразделах! Ну нет худа без добра, в результате нашел больше примеров :)

Игорь, а ты не смотрел демо Namespacehandler? Там сделано по другому, просто в методе Start возвращается INET_E_USE_DEFAULT_PROTOCOLHANDLER - и получается, что нет нужды делать обертку вокруг стандартного обработчика. На первый взгляд, для задачи фильтрования это будет самое простое решение.


 
Ihor Osov'yak   (2003-05-16 00:25) [18]

> На первый взгляд, для задачи фильтрования это будет самое простое решение.

С первого взгляда ты прав. Детально я не смотрел. Свое изделие, то что опубликовал, готовил несколько для других целей.. В этом случае (на тему сабжа), то что ты предлагаешь, возможно более изящно. Нужно взять на заметку.


 
BlackIce   (2003-05-16 16:19) [19]

собственно вопрос почти такой же...

то есть при загрузке, сначала же грузится страница, а потом всё что на ней находится...моя задача, получить текст страницы, как текст, поменять там адреса картинок ( на локальные адреса..)..и вставить этот код обратно...(либо в тотже webbrowser, либо в другой..не суть важно...)

каким образом можно получить из webbrowser весь исходный код HTMLной страницы? и как его запихнуть обратно..?..
и если можно то объясняйте, как для ребёнка :))...слишком мало я програмирую пока ещё....практики нет....


 
sergey2   (2003-05-16 17:31) [20]

2 BlackIce Можно... Но ведь это неудобно... Например если в страничке будет несколько фреймов, то что тогда?


 
BlackIce   (2003-05-16 17:41) [21]

2 sergey2

мне это нужно для определённого сайта...там код хтмлный простой, только картинки с помощью скрипта меняются...хочу вместо них вставлять свои..(точнее не свои, а теже картинки, только локально, что бы трафик сильно не жрать..)


 
Ihor Osov'yak   (2003-05-16 18:49) [22]

2 BlackIce (16.05.03 16:19)

Дык уже говорили - или свой специализированный прокси и работать через него (прокси можно даже в пределах чвоего придоженения - TServerSocket поможет в этом деле), или вариация на тему app..

Подмена контекста TWebBrowser посде загрузки, несмотря на кажующуюся простоту, более трудоемка. Но это только предположение, практически в этом направлении не работал..


 
sergey2   (2003-05-16 18:52) [23]

2 BlackIce Получить html код из TWebbrowser можно типа так

var
code:string;

.......


code:=webbrowser1.oleobject.document.all.item(0).innerHTML;

а насчет запихнуть - поищи на форуме. Тут это где-то проскакивало..

2 Ihor Osov"yak
> Join This Group! есть там такие волшебные слова, если мне > память не изменяет..

Это я естественно делал. Правда уже понял в чем дело...У меня настройки кеша в WinRoute такие что та страничка снова из кеша вылезала.


 
sergey2   (2003-05-19 21:53) [24]

Перерыл весь инет в поисках инфы по APP. пробовал все что можно, но все равно полностью не врубился во все.

Так как на форуме моими проблемами просто так никто не захочет серьезно заниматься то может кого устроит вариант написания работающего примера за определенную (небольшую) плату?

Вобщем для меня идеальным вариантом было бы если бы кто-то взял за основу TEmbeddedWB и добавил туда event аналогичный onBeforeNavigate2 с параметрами (var URL:string, var cancel:boolean), но чтобы он вызывался при каждой попытке браузера сделать загрузить любой файл (картинки, html, и прочие, т.е. все)
Если такое невозможно то приемлимым вариантом было бы создание исходников примера, который бы это все реализовал (как можно проще без лишних наворотов). Вобщем при загрузке странички чтобы можно было отключить определенный рисунок, html, и пр.

И сколько это может стоить?


 
Ihor Osov'yak   (2003-05-21 01:02) [25]

2 sergey2 (19.05.03 21:53)

Несколько дней назад я выложил пример в кладовке. Но он немного с наворотами.. Посмотри - может сможешь сделать адаптацию под себя. Также проштудируй http://www.euromind.com/iedelphi/app.htm

Если за неделю-полторы не отыщешь исполнителя или не сделаешь сам - можешь связываться со мной. Сейчас - сорри - занят. Дней за 4-5 мог-бы сделать.. Мыло мое найдешь в инене - поищи по нику на groups.google.com - этот ник уникальный :-)


 
sergey2   (2003-05-21 12:04) [26]

Я смотрел тот пример. экзешник работает. Но исходники не могу кимпильнуть. дельфя хочет variants.dcu (кстати это что такое и где его взять?)

Но даже если все будет то твой пример я так понял типа ведет лог что когда начинало и заканчивало загружаться... А как сделать чтобы можно было "вырубать" все ненужное?


 
Ihor Osov'yak   (2003-05-21 12:26) [27]

2 sergey2

Писалось для D6. В более древних версиях потроха этого модуля разбросаны по другим юнитам - убери variants с uses - там дальше разберешся..

> "вырубать" все ненужное

Start должна возвратить ошибку.. Или перенаправить на другой урл - твой..

Но имхо, см.
nikkie © (15.05.03 23:57)

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


 
nikkie   (2003-05-21 16:38) [28]

2 sergey2
Что-то ты легко сдаешься. Чисто "отрубание" я сделал тогда же, когда эта идея пришла в голову, за 15 минут. Я сделал так: взял пример Namespace handler"a с euromind (он совсем простой), удалил оттуда код, не относяшийся к методам IInternetProtocol, в методе Start написал такой код (тестировал навигируя на www.ya.ru - отрубалось лого, поскольку оно берется с www.yandex.ru):
if Pos(" http://www.ya.ru", LowerCase(szUrl)) = 1 then begin
Result := INET_E_USE_DEFAULT_PROTOCOLHANDLER;
end else begin
OIProtSink.ReportData(BSCF_FIRSTDATANOTIFICATION or
BSCF_LASTDATANOTIFICATION or
BSCF_DATAFULLYAVAILABLE, 0, 0);
OIProtSink.ReportResult(S_OK, S_OK, nil);
Result := S_OK;
end;

в методе Read оставил только
Result := S_FALSE;
в методе Terminate оставил только
Result := S_OK;

Во всех остальных методах и так ничего кроме Result := S_OK; или Result := E_NOTIMPL; и не было.

Вместо лого браузер показывает прямоугольник с красным крестиком и alt text"ом. Если тебе это и надо то вот и все... Ну а если нужно вместо картинки что-то свое показать, то пример с euromind вроде это и делает. Было бы, конечно, здорово, если бы можно в методе Start поменять Url, но вряд ли это возможно...


 
Ihor Osov'yak   (2003-05-21 18:04) [29]

> можно в методе Start поменять Url, но вряд ли это возможно...

Думаю что можно, на сейчас лень смотреть.. В худшем случае никто не запрещает и самому имплементацию соотв. протокольных методов делать..

> Что-то ты легко сдаешься.

Это да.. нельзя так



 
Ihor Osov'yak   (2003-05-21 18:04) [30]

сдаваться в смысле нельзя


 
sergey2   (2003-05-25 17:01) [31]

up
(Пока пытаюсь разобраться, но тема за это время не должна исчезнуть)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.009 c
4-101026
dimonf
2003-05-28 11:02
2003.07.31
Подскажите какая функция в API отвечает за вывод PopupMenu???


1-100756
tvic
2003-07-16 14:15
2003.07.31
TLabel и Timage


6-100865
ec
2003-05-07 22:21
2003.07.31
ISAPI


1-100821
Zilog
2003-07-17 16:28
2003.07.31
КАК: нужно дату 17.07.2003 преобразовать в 2003/07/17


3-100642
Avreliy
2003-07-10 17:17
2003.07.31
Изменение значения генератора в процедуре.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский