Форум: "Сети";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
ВнизПомогите узнать, куда ведет Flash Banner (iHTMLObjectElement) Найти похожие ветки
← →
Googler2007 (2006-12-19 13:45) [0]Вопрос не самый тривиальный. Нужно найти на странице все flash-объекты и узнать, на какую страницу они ссылаются.
Упрощенно дела обстоят так:
1) На форме лежит TWebBrowser, в который при старте программы загружается, допустим, http://lenta.ru
2) После загрузки сайта выполняется код поиска на странице всех объектов (iHTMLObjectElement), у которых classid = clsid:d27cdb6e-ae6d-11cf-96b8-444553540000 (т.е. всех flash-баннеров)
3) Далее мне необходимо понять, куда ведут эти flash-баннеры. Поскольку для того, чтобы это понять, по нему нужно кликнуть, мне необходимо узнать Handle этого flash-баннера.
4) Я знаю, что flash-баннер (да и любой flash-объект на странице) имеет класс - MacromediaFlashPlayerActiveX. Казалось бы все просто - нужно сделать что-то вроде этого:
var
HandleList:TStringList;
function ReturnWindow(H:HWND;l:LPARAM):boolean; stdcall;
var
Buff: array [0..255] of Char;
begin
GetClassName(H, Buff, SizeOf(Buff));
If AnsiLowerCase(String(Buff))="macromediaflashplayeractivex" then
HandleList.Add(IntToStr(H));
result:=true;
end;
function GetFlashInWebBrowserHandle(Web1 : TEmbeddedWB; FlashNum:Integer):HWND;
var
I:Integer;
begin
HandleList:=TStringList.Create;
try
EnumChildWindows(Web1.handle, @ReturnWindow, 0);
if FlashNum>HandleList.Count-1 then
begin
Result:=0;
Exit;
end;
Result:=StrToInt(HandleList[FlashNum]);
finally
HandleList.Free;
end;
end;
5) Но есть 1 огромная проблема: порядок нахождения окон с классом "macromediaflashplayeractivex" через EnumChildWindows не соответствует порядку нахождения баннеров через iHTMLDocument2.all. Т.е. в коллекции iHTMLDocument.all элементы object (сейчас я говорю только о flash, с clsid:d27cdb6e-ae6d-11cf-96b8-444553540000) идут в другом порядке, нежели через поиск окон.
Не имел ли дела кто-нибудь с подобной проблемой? Как при нахождении iHTMLObjectElement (flash) в коллекции iHTMLDocument.all узнать, на какую страницу он ссылается?
P.S. Вариант Source flash-объекта (его-то узнать как раз не проблема) загружать в отдельный WebBrowser, искать в этом отдельном WebBrowser"е его хэндл (так как он там один) и посылать сообщения WM_LBUTTONDOWN, WM_LBUTTONUP - не годится и вот по какой причине:
Обычно у очень многих flash-объектов сорс динамический и прямой ссылки к файлу узнать нельзя. Т.е. сорс баннера может быть например такой:
http://testsite.ru/ad/showad/ad.php
И заново загрузив flash баннер по этой ссылке я могу уже получить совершенно другой баннер.
Понимаю - проблема очень сложная, но все-таки не теряю надежды, что ее можно как-то решить.
← →
Вася (2006-12-20 16:03) [1]> Как при нахождении iHTMLObjectElement (flash) в коллекции
> iHTMLDocument.all узнать, на какую страницу он ссылается?
Попробуй изучить свойства объекта flash, например вызвав функцию View_Properts и передав ей параметром ID объекта
function View_Properts(obj)
{
var t = "<br>";
for (var i in obj) { t += i+" = "+obj[i]+"\n<br>"; }
document.write(t);
}
может чего и накопаешь
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c