Конференция "Сети" » Браузер на TChromium. Особенности работы
 
  • 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 (с тегами, ссылками и всем прочим) для последующего парсинга. Никто не в курсе?
 
Конференция "Сети" » Браузер на TChromium. Особенности работы
Есть новые Нет новых   [134435   +13][b:0][p:0.002]