喫茶XRAYトップページ

[スレッド全体
]

[9142] IEのレンダリングの互換モード返信 削除
2015/8/28 (金) 09:01:04 Mr.XRAY
このスレッドのサンプルコードを TWebBrowser または TEmbeddedWB でテスト
する方は,IE のレンダリングモードを最新の値に変更してください.
古いバージョンの IE オブジェクトの DOM では getElementsByClassName
をサポートしていません.

[07_IE コンポーネントのレンダリングの互換モードを変更]
http://mrxray.on.coocan.jp/Delphi/plSamples/944_plGooleSearch.htm#07

プログラム名は,サーバに UP しているプロジェクトの場合は Project1.exe
です.


TEmbeddedWB の場合は以下のようなコードで実行可能です.

procedure TForm1.Button1Click(Sender: TObject);
var
  LClassName : String;
  LJsText    : String;
begin
  if EmbeddedWB1.Document = nil then exit;

  LClassName := '"submit"';
  LJsText   := 'document.getElementsByClassName(' + LClassName + ')[0].click();';
  EmbeddedWB1.ExecScript(LJsText, 'JavaScript');
end;


TWebBrowser の場合は,例えば以下のようにします.
uses に MSHTML が必要です.

procedure TForm1.Button1Click(Sender: TObject);
var
  LDoc        : IHTMLDocument2;
  LHTMLWindow : IHTMLWindow2;
  LClassName  : String;
  LJsText     : String;
begin
  LDoc := WebBrowser1.Document as IHTMLDocument2;
  if not Assigned(LDoc) then exit;

  LHTMLWindow := LDoc.parentWindow;
  if not Assigned(LHTMLWindow) then exit;

  try
    LClassName := '''submit''';
    LJsText  := 'document.getElementsByClassName(' + LClassName + ')[0].click();';
    LHTMLWindow.execScript(LJsText, 'JavaScript');
  except
  end;
end;


[9143] Re:IEのレンダリングの互換モード返信 削除
2015/8/28 (金) 13:09:03 Mr.XRAY
> 古いバージョンの IE オブジェクトの DOM では getElementsByClassName
> をサポートしていません.


MSDN オンラインの記事によると IE 9 からのようです.
ついでに,IE で表示している場合の操作例です.
TShell コンポーネントを使用しています.

[タイプライブラリの取り込み ( Delphi 2009 - XE5 )]
http://mrxray.on.coocan.jp/Delphi/CompoInstall/TypeLibraryD2009.htm

IE を新規に起動して,ローカルの this_is_a_button.htm を表示します.
そこのボタンをクリックします.
this_is_a_button.htm の中身は,これまでと同じで,
<Button class="submit" onClick="location.href='http://mrxray.on.coocan.jp/index.htm'">SEND</Button>
です.

動作確認は Windows 7 U64(SP1) + Delphi XE(UP1) Pro + IE 11 です.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, SHDocVw, ExtCtrls, Shell32_TLB, OleServer;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Shell1: TShell;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  MSHTML,
  ShellAPI;

{$R *.dfm}

//=============================================================================
//  新規にIEを起動して,操作対象のページを表示
//
//  ShellExecuteの使用にはusesにShellAPIが必要
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  LAppStr : String;
  LAppCmd : String;
begin
  //IEはフルパスでなくても起動可能
  LAppStr := 'IEXPLORE.EXE';
  LAppCmd := ExtractFilePath(Application.ExeName) + 'this_is_a_button.htm';
  ShellExecute(Handle, 'open', PChar(LAppStr), PChar(LAppCmd), nil, SW_SHOW);
end;

//=============================================================================
//  表示中のウェブページのボタンをクリックするサンプル
//  JavaScriptのコードとして実行
//
//  ShellWindowsの使用にはusesにSHDocVwが必要
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
var
  LSHWindows  : ShellWindows;
  LIEObj      : InternetExplorer;
  LDoc2       : IHtmlDocument2;
  LHTMLWindow : IHTMLWindow2;
  LTagName    : String;
  LJsText     : String;
begin
  LSHWindows := Shell1.Windows as ShellWindows;
  LIEObj     := LSHWindows.Item(LSHWindows.Count - 1) as InternetExplorer;

  LDoc2 := LIEObj.Document as IHTMLDocument2;
  if Assigned(LDoc2) then begin
    LHTMLWindow := LDoc2.parentWindow as IHTMLWindow2;

    LTagName := '''button''';
    LJsText  := 'document.getElementsByTagName(' + LTagName + ')[0].click();';

    LHTMLWindow.execScript(LJsText, 'JavaScript');
  end;
end;

end.



[▼次のスレッド]
INCM/CMT
Cyclamen v3.82