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;