-
Pcrepair © (30.12.11 02:33) [0]Добрый день и с Новым годом
Есть код с применением компонета 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. кто знает способ (код) для установки фокуса на загруженную страницу
Всем ответившим по существу вопросов спасибо -
~AQUARIUS~ (30.12.11 11:31) [1]
> // вот тут не хватает кода для установки фокуса
А вот и этот код:frame.ExecuteJavaScript('document.querySelector(\":focus\").blur();', '', 0);
Собственно, это не установка фокуса, это его снятие с активного елемента -
~AQUARIUS~ (30.12.11 11:37) [2]Еще можете в начале обработчика добавить строкуif (httpStatusCode <> 200) then Exit;
т.к. я заметил, что обработчик вызывается несколько раз, при этом с кодом 200 последний (ну это в общем логично) -
Pcrepair © (03.01.12 13:09) [3]вот что получается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 (с тегами, ссылками и всем прочим) для последующего парсинга. Никто не в курсе?