Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как в EmbeddedWB вывести часть страницы


Автор: DemonXT 30.4.2012, 21:30
Доброе Время суток!

Подскажите возможно-ли через компанент TEmbeddedWB вывести не всю старицу, а только нужный мне блок.
Например если написать:
Код

EmbeddedWB1.Navigate('http://otdahni.ru/');

Произойдёт вывод всей страницы сайта, а мне нужно чтобы выводился только блок авторизации вида:
http://fastpic.ru/

Помогите пожалуйста!

Автор: mistrmax 1.5.2012, 12:15
Можно воспользоваться функцией ExecScript(sExpression, sLanguage: string);
К примеру: 
Код

EmbeddedWB1.ExecScript('alert(0);','JavaScript');

Выполните яваскрипт который скрывает все элементы кроме нужных.

Автор: DemonXT 1.5.2012, 17:17
Это не плохая мысль. Спасибо.
Вот только я не силён JavaScript. Может поможете такой скрипт собрать?

Автор: XperT 1.5.2012, 23:03
С JavaScript очень много гемороя: во-первых выполнять скрипты нужно после полной загрузки страницы (а этот момент еще нужно определить и в некоторых случаях это бывает довольно проблематично), во-вторых пользователь успеет увидеть страницу полностью, перед тем как сработают скрипты. Как на меня, то лучше загружать код страницы отдельно, вырезать всё лишнее, а потом подсовывать в браузер. А лучше вообще код формы хранить где-то вместе с программой и подсовывать браузеру без лишней загрузки страницы, это же не динамическая информация (разве что там есть скрытые поля с динамикой).

Автор: DemonXT 2.5.2012, 18:12
Хранить код страницы, а потом его подставлять мне совсем не подходит. Так как теряется севязь с текущей сессией, а мне это не нужно.

Автор: XperT 3.5.2012, 00:20
Ну тогда остаются ява скрипты, либо пройтись по DOM и захайдить все лишние элементы. Но в любом случае без описанных мной выше минусов решения я не вижу.

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

Еще, как вариант, можно сделать аналогичные поля для логина в своей программе, при заполнении которых отправляется вручную составленный POST запрос и дальнейшая работа уже ведется через окно браузера.

Автор: DemonXT 3.5.2012, 06:20
А можно сделать по-другому:
Страница будет открыться полностью в маленьком окне, а я просто сделаю скроллинг по вертикали и горизонтали на нужную позицию?
Как можно в TEmbeddedWB программно сделать скроллинг на нужную позицию?

Автор: XperT 3.5.2012, 12:14
У меня завалялся такой код вертикального скролинга:
Код

procedure WBScroll(x:integer);
var
  lDoc: IHTMLDocument2;
  lBody: IHTMLElement;
  lStyle: IHTMLStyle;
  vvv: IHTMLElement2;
begin
  lDoc := IHTMLDocument2(TEmbeddedWB(EmbeddedWB1).Document);
  if Assigned(lDoc) then
  begin
    lBody := lDoc.Body;
    if Assigned(lBody) then
    begin
      lBody.style.QueryInterface(IID_IHTMLStyle, lStyle);
      if Assigned(lStyle) then
      begin
       lBody.QueryInterface(IID_IHTMLElement2, vvv);
       vvv.scrollTop:=x;
      end;
    end
  end;
end;


Сделать аналог горизонтального скролинга не должно быть проблемой

Автор: DemonXT 3.5.2012, 19:48
Спасибо за помощь придумал код по-проще:
Код

EmbeddedWB.ScrollToPosition(33,720);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)