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