Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Браузер на TChromium. Особенности работы

36K
30 декабря 2011 года
Pcrepair
64 / / 16.01.2011
Добрый день и с Новым годом
Есть код с применением компонета TChromium. Браузер загружает страницу, после загрузки делает КОНТР+А и КОНТР+С

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
URL : string;
begin
     URL := Edit1.Text;
     Chromium1.Browser.MainFrame.LoadUrl(URL); //загрузка страницы
end;

procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean); //по окончании загрузки страницы
begin
  // вот тут не хватает кода для установки фокуса
  frame.SelectAll; //выделить все
  frame.Copy;      //копировать выделенное в буфер
end;

На сайтах без окон ввода данных (forums.kuban.ru) все работает нормально
На сайтах типа YA.RU фокус автоматически устанвливается на окне ввода, соответсвенно ничего не выделяется и не копируется. В TWebBrowser эта задача решается следующим кодом
 
Код:
if WebBrowser1.Document <> nil then
  (Webbrowser1.Document as IHTMLDocument2).ParentWindow.Focus; //вот тут фокус на все окно, проверено.работает

ВОПРОСЫ:
1. Где есть справочники с описанием методов TChromium?
2. кто знает способ (код) для установки фокуса на загруженную страницу
Всем ответившим по существу вопросов спасибо
5
30 декабря 2011 года
hardcase
4.5K / / 09.08.2005
Помимо всего прочего фокус могут устанавливать скрипты на странице.
36K
30 декабря 2011 года
Pcrepair
64 / / 16.01.2011
Цитата: hardcase
Помимо всего прочего фокус могут устанавливать скрипты на странице.



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

5
30 декабря 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Pcrepair
скрипты на YA.ru и устанавливают фокус, и на других сайтах тоже. а что еще может устанавливать фокус на окне ввода (фразы, пароля, логина)?


Как скрипт поставил фокус - так он может его и убрать. Иными словами - внедрите в страницу свой собственный скрипт.

7
31 декабря 2011 года
@pixo $oft
3.4K / / 20.09.2006
Или можно послать нажатие Esc/Tab
36K
03 января 2012 года
Pcrepair
64 / / 16.01.2011
вот что получается

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
URL : string;
begin
     Memo1.Clear; // очистка МЕМО перед циклом
     Clipboard.Clear; // очистка перед циклом - на всякий случай и для наглядности (смотрим в FreeClipViewer)
     URL := Edit1.Text;
     Chromium1.Browser.MainFrame.LoadUrl(URL);
end;

procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean);
begin
  if (httpStatusCode <> 200) then Exit;
  Chromium1.Browser.MainFrame.ExecuteJavaScript('document.querySelector(":focus").blur();', '', 0); //убираем фокус с окон ввода, на некоторых сайтах это актуально
  Chromium1.Browser.MainFrame.SelectAll; //выделяем все
  Application.ProcessMessages;
  Chromium1.Browser.MainFrame.Copy; //именно так а не Frame.Copy - иначе на некоторых сайтах в буфер вначале копиркется одно, потом другое и только потом вся страница, это прямо видно в FreeClipViewer
  Application.ProcessMessages;
  Memo1.PasteFromClipboard; //почемуто на некоторых сайтах ничего в МЕМО не копируется, тогда как в буфере все есть (FreeClipViewer все видит)


Вот тут возникает еще вопрос:
как из буфера скопировать содержимое формата CF_HTML (то, что это именно этот формат подтверждает PortableNVU (выжуальный редактор) обратно в переменную? какой бы тип перемонной не выставлял, все время идет несовпадение типов переменных? сразу скажу что Chromium1.Browser.MainFrame.Copy копирует данные только в клипборд. отсюда и необходимость вернуть их в программу причем в формате CF_HTML (с тегами, ссылками и всем прочим) для последующего парсинга. Никто не в курсе?
79K
11 января 2012 года
hans.
2 / / 11.01.2012
Попробую помочь с Вашим вопросом, правда я пишу на C++.
чтобы получить innerhtml достаточно обратится к полю WB->Browser->MainFrame->Source и Text, чтобы получить innertext фрейма.
чтобы войти в DOM структуру нужно вызвать callback функцию:
WB.Browser.MainFrame.VisitDomProc(
procedure (const doc: ICefDomDocument) begin
//Здесь мы можем работать с DOM объектами, перебирать,устанавливать свойства и т.д.
end
);
79K
11 января 2012 года
hans.
2 / / 11.01.2012
У меня тоже есть вопрос по TChromium, может кто то сможет подсказать.
Вот на форме лежит браузер TChromium, при переходе по ссылке с Shift-том создается новое окно браузера.
Вопрос, как его привязать к моей программе, тоесть создать новую вкладку и поместить на нее создавшийся браузер.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог