Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Chromium Embedded подскажите   Найти похожие ветки 

 
Rasta   (2012-02-12 18:10) [0]

Подскажите пожалуйста как в Chromium Embedded получить список url которые подгружаются в данный момент и увидеть что приходит в ответ с сервера.


 
Rasta   (2012-02-12 18:40) [1]

Вроде установил все правильно. Добавил все папки. Запустил DCEF_D7.dpk скомпилировал и установил. Но если делаю обработку любого события выходит ошибки
 [Error] Unit1.pas(14): Undeclared identifier: "ICefBrowser"
 [Error] Unit1.pas(14): Undeclared identifier: "ICefFrame"
 [Error] Unit1.pas(15): Undeclared identifier: "ustring"

В чем проблема? Использую Delphi 7 Lite Full Edition 7.3.4.3


 
brother ©   (2012-02-12 19:11) [2]

я бы начал с переустановки НОРМАЛЬНОЙ делфи...


 
DVM ©   (2012-02-12 20:04) [3]


> как в Chromium Embedded получить список url которые подгружаются
> в данный момент

OnBeforeResourceLoad  кажется событие назвается, там можно поймать абсолютно все URL которые браузер собирается загружать.


> и увидеть что приходит в ответ с сервера.

OnResourceResponse вероятно.


> Вроде установил все правильно. Добавил все папки.

Значит не все. А вообще правильно сказали, поставь нормальную версию Delphi а не огрызок.


 
Rasta   (2012-02-12 21:08) [4]

Поставил нормальный Delphi. Качал с трекера одного.
При любом событии в данном случае на OnBeforeResourceLoad вываливаются ошибки
[Error] Unit1.pas(13): Undeclared identifier: "ICefBrowser"
[Error] Unit1.pas(14): Undeclared identifier: "ICefRequest"
[Error] Unit1.pas(14): Undeclared identifier: "ustring"
[Error] Unit1.pas(15): Undeclared identifier: "ICefStreamReader"
[Error] Unit1.pas(15): Undeclared identifier: "ICefResponse"

В чем все таки проблема? Может я не так как то ставлю?


 
Rasta   (2012-02-12 21:14) [5]

Прошу прощения за ложную тревогу. Ошибка понял в чем. При помещении на форму компонента не добавлялась библиотека ceflib.


 
Rasta   (2012-02-12 22:16) [6]

Большое спасибо тем кто ответил выше)

Список url к который подгружает браузер получаю в событии OnResourseResponse.
Выглядит так.


procedure TForm1.test(Sender: TObject; const browser: ICefBrowser;
 const url: ustring; const response: ICefResponse; var filter: ICefBase);
begin
 if(url<>"") then Memo1.Lines.Add(url);
end;


Но вот ответ не могу получить. Как понимаю он в Response но как преобразовать ICefResponse в String? Гугол ответа не дал :( Надеюсь на ваш совет гуру )


 
sniknik ©   (2012-02-12 22:22) [7]

> но как преобразовать ICefResponse в String?
а никак, т.к. судя по началу типа I, это интерфейс. он в стринг не преобразовывается.


 
DVM ©   (2012-02-12 22:40) [8]


> Rasta   (12.02.12 22:16) [6]


> if(url<>"") then Memo1.Lines.Add(url);

тут будь осторожен, возможно данное событие генерируется в доп потоке, обращаться из которого к интерфейсу программы нежелательно напрямую. Проверь GetCurrentThreadID у основного потока программы и в этом событии, одинаковые?


>  но как преобразовать ICefResponse в String?

в нем нет данных которые браузер загрузил


>  Надеюсь на ваш совет

надо подумать


 
DVM ©   (2012-02-12 22:45) [9]


> Rasta   (12.02.12 22:16) [6]

Если тебе нужны сами данные, то вероятно придется обрабатывать OnGetDownloadHandler, там есть handler: ICefDownloadHandler, а у него есть ReceivedData() там кусок данных (но не все данные). Также там есть
const mimeType, fileName: ustring; contentLength: Int64;
В принципе этого достаточно, чтобы сохранять скажем куда то, все что браузер загружает.


 
Rasta   (2012-02-12 22:53) [10]

Спасибо за подробный ответ. Буду разбираться.
Всегда помогаете в нужную минуту )


 
DVM ©   (2012-02-12 22:54) [11]


> Rasta   (12.02.12 22:53) [10]

Хотя я наверное тебя обманул с OnGetDownloadHandler. Через него пройдут только загружаемые браузером файлы. Вот так его использовать:

procedure TMainForm.crmGetDownloadHandler(Sender: TObject;
 const browser: ICefBrowser; const mimeType, fileName: ustring;
 contentLength: Int64; var handler: ICefDownloadHandler; out Result: Boolean);
begin
 SaveDialog.FileName := fileName;
 if SaveDialog.Execute then
   handler := TCefStreamDownloadHandler.Create(
     TFileStream.Create(SaveDialog.FileName, fmCreate), true);
 Result := True;
end;


 
Rasta   (2012-02-12 22:58) [12]

Хотя скорее всего мне это не поможет. Т.к. событие OnGetDownloadHandler вызывается при скачке файла. А мне необходимо прочитать данные приходящие от сервера по определенному url. Если я повторно буду их загружать то сервер мне ничего не выдаст.

так что скорее всего проблема остаеться открытой )


 
DVM ©   (2012-02-12 23:06) [13]


> А мне необходимо прочитать данные приходящие от сервера
> по определенному url.

Надо подумать. Дело в том, что в обертке TChromium для Delphi наружу вынесен не весь функционал Chromium Embedded. Надо поизучать внутренности его. Документации нет совсем, так что надо смотреть. Можно еще написать автору обертки (его контакты есть на google code) может присоветует что.


 
DVM ©   (2012-02-12 23:22) [14]


> Rasta   (12.02.12 22:53) [10]

Надо все таки работать в OnResourceResponse. Там есть некий параметр var filter: ICefBase

За ним скрывается:
   on_resource_response: procedure(self: PCefRequestHandler;
       browser: PCefBrowser; const url: PCefString;
       response: PCefResponse; var filter: PCefContentFilter); stdcall;

TCefContentFilter = record
   // Base structure.
   base: TCefBase;

   // Set |substitute_data| to the replacement for the data in |data| if data
   // should be modified.
   process_data: procedure(self: PCefContentFilter;
       const data: Pointer; data_size: Integer;
       var substitute_data: PCefStreamReader); stdcall;

   // Called when there is no more data to be processed. It is expected that
   // whatever data was retained in the last process_data() call, it should be
   // returned now by setting |remainder| if appropriate.
   drain: procedure(self: PCefContentFilter;
     var remainder: PCefStreamReader); stdcall;
 end;

Короче, добраться до загруженных данных можно.


 
Rasta   (2012-02-14 00:52) [15]

В общем нашел на просторах их группы вот такой код для получения ответа от сервера. Но с данным кодом у меня программа не компилируется. Ругается  access violation at address 00000000 read of address 00000000

procedure ss (const doc: ICefDomDocument);
 var
 q: string;
    begin
        q:= doc.Body.GetAsMarkup;
    end;

procedure TForm1.ResourseResponse(Sender: TObject; const browser: ICefBrowser;
 const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean);
begin
   browser.MainFrame.VisitDomProc(ss);
end;


 
sniknik ©   (2012-02-14 19:25) [16]

и конечно ICefBrowser писан на дельфи и коллбек (это же он?) для VisitDomProc понимает дельфевские соглашения о вызовах.


 
DVM ©   (2012-02-14 23:15) [17]

TCefFastDomVisitorProc = {$IFDEF DELPHI12_UP}reference to{$ENDIF} procedure(const document: ICefDomDocument);


 
DVM ©   (2012-02-14 23:21) [18]


> Rasta   (14.02.12 00:52) [15]

ты чего пытаешься от браузера получить то?
Если HTML код страницы так он и так после загрузки лежит в соответствующем свойстве браузера. VisitDomProc хоть и позволит обратиться к любому элементу на странице, но это не то, что загружал браузер. И нафига ты это все делаешь в ResourseResponse. ResourseResponse возникает многократно еще до загрузки страницы, никакими DOM там еще и не пахнет.


 
Rasta   (2012-02-15 12:45) [19]

В каких таких свойствах браузера? Я все перерыл. Не могу найти и все тут. Вопрос на форуме официальном не дал толкового ответа. Т.к. говорят это не их продукт мол этим другие занимаются они тока версией под C++.


 
Anatoly Podgoretsky ©   (2012-02-15 12:59) [20]

> Rasta  (15.02.2012 12:45:19)  [19]

Что такое оффициальный сайт? и именно для хрониума?


 
Rasta   (2012-02-15 13:12) [21]

Именно для хрониума. Официальный форум можно найти в гугле по слову magpcss.o. Не буду кидать ссыль сайта малоли это запрещено.


 
DVM ©   (2012-02-15 13:14) [22]


> Rasta   (15.02.12 12:45) [19]


> В каких таких свойствах браузера? Я все перерыл. Не могу
> найти и все тут.

HTML код лежит тут: TChromium.Browser.MainFrame.Source
Смотреть туда имеет смысл ПОСЛЕ прихода события OnLoadEnd


> Вопрос на форуме официальном не дал толкового ответа. Т.
> к. говорят это не их продукт мол этим другие занимаются
> они тока версией под C++.

Все вопросы тут: http://groups.google.com/group/delphichromiumembedded


 
DVM ©   (2012-02-15 13:16) [23]


> Rasta   (15.02.12 13:12) [21]
> Именно для хрониума.

Ты различай Chromium (браузер), Chromium Embedded (библиотека, основа Chromium-а) и Chromium embedded Delphi Framework (обертка к Chromium Embedded)


 
Anatoly Podgoretsky ©   (2012-02-15 13:46) [24]

> Rasta  (15.02.2012 13:12:21)  [21]

И что нам за тебя поискать?


 
Rasta   (2012-02-15 14:25) [25]


> Что такое оффициальный сайт?

Вы спросили я ответил.

С этим компонентом у меня какие то странности.
Выбивает ошибки как тока я обращаюсь в MainFrame в не зависимости откуда. К примеру на код

procedure TClientos.btn1Click(Sender: TObject);
var
URL:string;
begin
    URL := edt1.Text;
    chrm1.Browser.MainFrame.LoadUrl(URL);
end;

Ошибка Access violation at address 00467557 in module "Project1.exe". Read of address 00000000.


 
DVM ©   (2012-02-15 18:06) [26]


> chrm1.Browser.MainFrame.LoadUrl(URL);

так нельзя



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.097 c
2-1328363804
whoim
2012-02-04 17:56
2013.03.22
динамический двумерный массив of integer: не могу найти ошибку..


2-1337971927
Den
2012-05-25 22:52
2013.03.22
Передать VK_LBUTTON в функцию?


15-1351516826
xayam
2012-10-29 17:20
2013.03.22
Ненужные идеи


4-1262850914
Dy1
2010-01-07 10:55
2013.03.22
получение html-страницы post-запросом


15-1350457839
pasha_golub
2012-10-17 11:10
2013.03.22
Течет память. Кто виноват и что делать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский