본문 바로가기

Delphi/꿀팁

WebBrowser로 웹페이지 내 선언된 값 가져오기 - 1

1. TWebBrowser와 TButton을 하나 올려놓습니다.


2. SHDocVw와 MSHTML을 선언하고 간단한 HTML 소스를 작성합니다.

uses

  .., SHDocVw, MSHTML;

const sHTML =

'<html>                                                  ' + sLineBreak +

'<head>                                                 ' + sLineBreak +

'<meta charset="utf-8">                              ' + sLineBreak +

'<title> Delphi & JavaScript Test </title>           ' + sLineBreak +

'<script language="JavaScript">                   ' + sLineBreak +


'function GetData(AData)                            ' + sLineBreak +

'{                                                        ' + sLineBreak +

'  var sParam = AData;                              ' + sLineBreak +

'  window.location.href = ''myurl://'' + sParam; ' + sLineBreak + 

//웹페이지의 주소를 변경하여 웹페이지 내 데이터를 넘겨줍니다.

'}                                                         ' + sLineBreak +


'</script>                                               ' + sLineBreak +

'</head>                                                ' + sLineBreak +

'<body>                                                 ' + sLineBreak +

'Page Run..                                            ' + sLineBreak +

'</body>                                                ' + sLineBreak +

'</html>                                                 ';

3. 폼의 OnShow 이벤트에서 작성한 HTML 소스로 웹브라우저를 실행합니다.

procedure TForm1.FormShow(Sender: TObject);

var

  Doc: Variant;

begin

  if not Assigned(WebBrowser1.Document) then

    WebBrowser1.Navigate('about:blank');


  Doc := WebBrowser1.Document;

  Doc.Clear;

  Doc.Write(sHTML);

  Doc.Close;

end;

4. 버튼의 OnClick 이벤트에서 JavaScript를 실행시킵니다.

procedure TForm1.Button1Click(Sender: TObject);

var

  Doc: IHTMLDocument2;

  HTMLWindow: IHTMLWindow2;

  sFunction: string;

begin

  Doc := WebBrowser1.Document as IHTMLDocument2;


  HTMLWindow := Doc.parentWindow;


  try

    sFunction := 'GetData(''test1'')';

    HTMLWindow.execScript(sFunction, 'JavaScript');

  except

    ShowMessage('Fail to Get Data');

  end;

end;

5. WebBrowser의 OnBeforeNavigate2 이벤트에서 값을 파싱합니다.

procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject;

  const pDisp: IDispatch; const URL, Flags, TargetFrameName, PostData,

  Headers: OleVariant; var Cancel: WordBool);

const

  CUSTOM_URL = 'myurl://'; //선택적으로 파싱할 수 있도록 주소를 생성합니다. HTML 소스와도 통일 시킵니다.

var

  nPos : Integer;

  sParams : string;

begin

  nPos := Pos(CUSTOM_URL, URL); //변경된 주소로 URL이 맞게 왔는지 확인합니다.


  if nPos > 0 then

  begin

    sParams := Copy(URL, nPos + Length(CUSTOM_URL), Length(URL) - Length(CUSTOM_URL) - 1);

    //웹페이지 내 선언된 값을 델파이로 가져옵니다.


    ShowMessage(sParams);


    Cancel := True; //조작된 주소로 페이지가 넘어가는 것을 방지합니다.

  end;

end;

6. 웹페이지에서 넘겨준 값이 잘 들어오는지 확인합니다.


2019/03/07 - [ - Delphi] - WebBrowser로 웹페이지 내 선언된 값 가져오기 - 2

반응형