낭만온달-위버멘쉬를 꿈꾸며... :: [Chromium] CEF4Delphi - TChromium 컴포넌트 간단한 기능정리

[Chromium] CEF4Delphi - TChromium 컴포넌트 간단한 기능정리

카테고리 없음|2021. 6. 10. 11:09

TChromium 컴포넌트로 직접 얻을 수 있는 단순한 기능을 알아 봅니다.

테스트도구(DevTool) 창 열기

// DevTools는 TCEFParentWindow 컨테이너로 폼에 배치되어 있어야 합니다.

procedure TForm1.ShowDevTools(aPoint : TPoint);
begin
  DevTools.Visible  := True;
  DevTools.Width    := Width div 4; //메인 폼을 4등분하여 오른쪽에 배치
  Chromium1.ShowDevTools(aPoint, DevTools);
end;

 

브라우저 웹페이지내 TEXT 얻기

 
Chromium1.RetrieveText;

...
// Chromium1.OnTextResultAvailable 이벤트에서 요청한 HTML받아서 처리할 수 있다.
procedure TForm1.Chromium1TextResultAvailable(Sender: TObject; const aText: ustring);
begin
  clipboard.AsText := aText;
end;
  

 

브라우저 웹페이지내 HTML 얻기

 

Chromium1.RetrieveHTML;
...
// Chromium1.OnTextResultAvailable 이벤트에서 요청한 HTML받아서 처리할 수 있다.
procedure TForm1.Chromium1TextResultAvailable(Sender: TObject; const aText: ustring);
begin
  clipboard.AsText := aText;
end;

 

브라우저 웹페이지내 FRAME 아이디 목록 얻기

procedure TForm1.CopyFramesIDs;
var
  i          : NativeUInt;
  TempCount  : NativeUInt;
  TempArray  : TCefFrameIdentifierArray;
  TempString : string;
begin
  TempCount := Chromium1.FrameCount;

  if Chromium1.GetFrameIdentifiers(TempCount, TempArray) then
    begin
      TempString := '';
      i          := 0;

      while (i < TempCount) do
        begin
          //상수 CRLF(#10#13)는 unit uCEFConstants.pas 에 정의되어 있습니다.
          TempString := TempString + inttostr(TempArray[i]) + CRLF;
          inc(i);
        end;

      clipboard.AsText := TempString;
    end;
end;

 

브라우저 웹페이지내 FRAME 이름 얻기

procedure TForm1.CopyFramesNamesMsg;
var
  TempSL : TStringList;
begin
  try
    TempSL := TStringList.Create;

    if Chromium1.GetFrameNames(TStrings(TempSL)) then 
    	clipboard.AsText := TempSL.Text;
  finally
    FreeAndNil(TempSL);
  end;
end;

 

브라우저 웹페이지 호출/응답 정보 얻기

// 요청(Request)/응답(Response) 정보는 여러줄로 되어 있기 때문에 TStringList를 이용하는것이
// 편리하다.
FRequest    : TStringList;
FResponse   : TStringList;

...

//요청정보 캡쳐
procedure TForm1.InspectRequest(const aRequest : ICefRequest);
var
  TempHeaderMap : ICefStringMultimap;
  i, j : integer;
begin
  if (aRequest <> nil) then
    begin
      FRequest.Clear;

      TempHeaderMap := TCefStringMultimapOwn.Create;
      aRequest.GetHeaderMap(TempHeaderMap);

      i := 0;
      j := TempHeaderMap.Size;

      while (i < j) do
        begin
          FRequest.Add(TempHeaderMap.Key[i] + '=' + TempHeaderMap.Value[i]);
          inc(i);
        end;
    end;
end;

//응답정보 캡쳐
procedure TForm1.InspectResponse(const aResponse : ICefResponse);
var
  TempHeaderMap : ICefStringMultimap;
  i, j : integer;
begin
  if (aResponse <> nil) then
    begin
      FResponse.Clear;

      TempHeaderMap := TCefStringMultimapOwn.Create;
      aResponse.GetHeaderMap(TempHeaderMap);

      i := 0;
      j := TempHeaderMap.Size;

      while (i < j) do
        begin
          FResponse.Add(TempHeaderMap.Key[i] + '=' + TempHeaderMap.Value[i]);
          inc(i);
        end;
    end;
end;

// TChromium.OnBeforeResourceLoad Event Handler
procedure TForm1.Chromium1BeforeResourceLoad(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const request: ICefRequest; const callback: ICefRequestCallback;
  out Result: TCefReturnValue);
begin
  Result := RV_CONTINUE;

  if Chromium1.IsSameBrowser(browser) and
     (frame <> nil) and frame.IsMain then
    InspectRequest(request);
end;

// TChromium.OnResourceResponse Event Handler
procedure TForm1.Chromium1ResourceResponse(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const request: ICefRequest; const response: ICefResponse;
  out Result: Boolean);
begin
  Result := False;

  if Chromium1.IsSameBrowser(browser) and
     (frame <> nil) and
     frame.IsMain then
    InspectResponse(response);
end;

 

브라우저 웹페이지 네비게이션 History 얻기

FNavigationHistory : TStringList; 
// TChromium.OnNavigationVisitorResultAvailable Event Handler 
procedure TForm1.Chromium1NavigationVisitorResultAvailable( const entry: ICefNavigationEntry; current: Boolean; index, total: Integer; var aResult: Boolean); 
begin 
  if (entry <> nil) and entry.IsValid then 
  FNavigationHistory.Add(entry.Url); 
end;

 

브라우저 웹페이지 스냅샷 얻기(보이는 화면만)

procedure TForm1.TakeSnapshotMsg(var aMessage : TMessage); 
var 
	TempBitmap : TBitmap; 
begin 
	TempBitmap := nil; 
    try 
    	Chromium1.TakeSnapshot(TempBitmap); // TempBitmap 처리 코드... 
    finally 
    	if (TempBitmap <> nil) then 
        	FreeAndNil(TempBitmap); 
    end; 
end;

 

댓글()