EmbeddedWB, как не загружать с другого домена

 
0
 
Delphi, Kylix & Pascal
ava
lollollollol | 21.03.2013, 21:51
Снова всех приветствую.

Добился стабильной работы от EmbeddedWB, избавился от утечки памяти, и похоже осталась финальная загвоздка.
Сайт, который загружается в EmbeddedWB подгружает какие-то картинки и js с другого домена, но тот домен по неизвестным причинам не работает.
Результат - долго пытается загрузить страничку.

Я хочу сделать так, чтобы EmbeddedWB не загружал никаких файлов со сторонних доменов.
Например я открываю сайт http://vasya.com/
На этом сайте выполняется загрузка картинок,js,css не только с домена http://vasya.com/, но и с http://blabla.com/
Нужно сделать чтобы загрузка скриптов и картинок выполнялась только с домена http://vasya.com/.

Посмотрел все свойства компонента, ничего не нашел. Подскажите в каком направлении копать, я что-то даже в юнитах компонента не нашел кода загрузки скриптов и картинок, хотел прям там условие прописать.

Прошу помощи, кто чем может
Kommentare (14)
ava
lollollollol | 21.03.2013, 22:15 #
Ничего в голову не приходит... Можно конечно создать socks на 127.0.0.1:Любой порт, настроить работу через прокси, и уже на уровне прокси фильтровать куда пускать запрос, но я считаю это уже изврат высшей степени.

Должна быть другая возможность решить проблему
ava
lollollollol | 22.03.2013, 19:29 #
Ещё думал может изменить html таким оразом, чтобы там небыло ссылок на другие домены, но ведь браузер вначале всё загружает
ava
lollollollol | 23.03.2013, 06:30 #
Я вот подумал, может быть можно достучаться до функций которые выполняют парсинг ссылок перед тем как браузер начнёт грузить необходимые файлы, прописаные в html? Не удаётся найти, есть ли смысл копать  этом направлении, или за это ядро IE отвечает?
ava
Чучмек | 25.03.2013, 08:35 #
Цитата (lollollollol @  23.3.2013,  06:30 findReferencedText)
Я вот подумал, может быть можно достучаться до функций которые выполняют парсинг ссылок перед тем как браузер начнёт грузить необходимые файлы, прописаные в html

Перехвати gethostbyname (getaddrinfo) и connect из WS2_32.dll
ava
lollollollol | 25.03.2013, 20:01 #
Эт как перехватить? Я ради интереса делал подобное год назад, но я там свою функцию перехватывал:
Менял адрес вызова функции, и выполнял свою функцию
Сейчас попробую так сделать. Или существуют стандартные методы перехвата, чтото типа дополнительного uses?
ava
Чучмек | 25.03.2013, 20:10 #
Цитата (lollollollol @  25.3.2013,  20:01 findReferencedText)
чтото типа дополнительного uses

Можешь пока воспользоваться моим.

uses ...,FunctionPatch;
...
function old_connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
asm
db '000000000000000000000000000000000000000000000000';
end;
function my_connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
begin
Result:=old_connect(s,name,namelen);
end;
...
begin
Patch('WS2_32.dll','connect',@my_connect,@old_connect);
...


ava
lollollollol | 25.03.2013, 20:49 #
Спасибо, завтра отпишу что получилось
ava
lollollollol | 26.03.2013, 08:09 #
Спасибо большое!

Как появилось время сразу решил сделать, и всё получилось.
Правда мне удобнее было перехватывать функцию getaddrinfo, сделал по Вашему примеру, всё сразу заработало так как и ожидалось!

Ещё раз большое спасибо!
ava
Чучмек | 26.03.2013, 09:14 #
Цитата (lollollollol @  26.3.2013,  08:09 findReferencedText)
Правда мне удобнее было перехватывать функцию getaddrinfo

IE6 использует gethostbyname. Для совместимости необходимо перехватывать и эту функцию.
ava
lollollollol | 26.03.2013, 16:06 #
у меня ие8, getaddrinfo работает, если я сделаю gethostbyname, на ие 8 тоже будет работать?

ava
Чучмек | 26.03.2013, 16:39 #
Цитата (lollollollol @  26.3.2013,  16:06 findReferencedText)
на ие 8 тоже будет работать
 если только getaddrinfo - нет.
Необходимо перехватывать обе функции.

später ergänzt:
Какой алгоритм используешь?
ava
lollollollol | 26.03.2013, 16:46 #
Поясни принцип работы, а то чтото торможу.

Вот есть 3 функции,


function old_gethostbyname(name: PChar): PHostEnt; stdcall;
asm
  db '000000000000000000000000000000000000000000000000';
end;

function old_getaddrinfo(nodename, servname: PChar; hints: paddrinfo; var res: paddrinfo): integer; stdcall;
asm
  db '000000000000000000000000000000000000000000000000';
end;

function old_connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
asm
  db '000000000000000000000000000000000000000000000000';
end;


Что происходит когда они вызываются?
ava
Чучмек | 26.03.2013, 17:04 #
Цитата (lollollollol @  26.3.2013,  16:46 findReferencedText)
Строка   db '000000000000000000000000000000000000000000000000'; за что отвечает?

Резервирует место
ava
lollollollol | 26.03.2013, 17:26 #
Цитата


По адресу перехватываемой функции записывается переход на my_function

По адресу old_function переносится часть кода из перехватываемой, которая затирается переходом, и переход на оставшийся код. 


Да, сам алгоритм я понял, меня смутило то что во всех случаях одна строка кода выполняется
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden