2013년 7월 16일 화요일

홈페이지에 있는 자바 스크립트 호출하기

본 예제는 2가지의 기술이 들어 있습니다.
웹에서의 버튼 조작을 델파이로 갖어와서 델파이에서 처리를 하는데 TWebBrowser 의
StatusTextchange 이벤트를 이용하는 것과
웹에 있는 Javascript function 을 실행하는 것입니다.

홈페이지에는 아래와 같은 스크립트가 들어 있습니다.
<head>
  <script language="javascript">
        function closewin(num){
            window.status='close';
            window.status='';
            window.close();
        }
  </script>
</head>
.......
<from>
   <input id="idtext" name="idtext" type="text" />
   <input 0="" id="idimage" name="idimahe" onclick="closewin()" src="images/images.jpg" style="cursor: hand;" type="image" />
   <input id="idsubmit" name="idsubmit" type="submit" />
</from>
폼에 WebBrowser 와 Editor, button 3개를 올려 놓고
procedure TForm4.Button1Click(Sender: TObject);
var iDoc: IHTMLDocument2;
    iWin: iHTMLwindow2;
    ifunc: string;
begin
  WebBrowser1.Document.QueryInterface(IHTMLDocument2, iDoc);
  WebBrowser1.Document.QueryInterface(IHTMLWindow2, iWin);
  ifunc:= 'closewin()';
  try
    iwin.execScript(ifunc, 'JavaScript');
  finally
  end;
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
  WebBrowser1.Navigate(http://localhost/test.html');
end;

procedure TForm4.Button3Click(Sender: TObject);
var Obj,Doc : OleVariant;
begin
  Obj:= 0;
  // 필요하면 IDispatch(TTTestCode.Create); 방법으로 Dispatch인터페이스로 형변환한다...
  // HTML Script는 Dispatch인터페이스만 지원한다.
  // Script 인터페이스를 얻고...
  Doc:=IHTMLDocument2(WebBrowser1.Document).Script;
  // Script의 SetObject함수를 호출한다...(이함수는 HTML의 JavaScript함수이다)
  Doc.closewin(obj);
end;

procedure TForm4.WebBrowser1StatusTextChange(ASender: TObject; const Text: WideString);
var iStr: string;
begin
  iStr:= Text;
  if istr= 'close' then begin
    close;
  end;
end;
웹에서 이미지를 크릭하면 프로그램이 종료합니다.
프로그램에서 버튼3를 크릭하면 웹에 있는 스크립트를 실행하고, 즉 이미지를 크릭한 것과 같은 현상, 그 결과로서 프로그램을 종료 합니다.
다른 스크립트를 실행 시킬 수 있고, 다른 동작을 할수 있겠지요.
예를 들어 특정 버튼의 결과에 특정 디비에서 자료를 읽어와 Html을 만들고 그웹을 뿌려줄 수 있겠지요.

델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.