Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.29;
Скачать: CL | DM;

Вниз

TWebBrowser спотыкается на <SCRIPT>, если не задан ParentWindow   Найти похожие ветки 

 
evvcom ©   (2006-05-15 00:29) [0]

Решил помучить всем известный IE, т.е. распарсить HTML без отображения IE. Таким образом ParentWindow не задается. И вот что обнаружил. У меня IE 6.0.2800.1106.xpsp2. Как только встречается тег <SCRIPT>, у IE "сносит крышу", по другому назвать это не могу. Т.е. этот скрипт в документе становится последним, что IE разобрал и принял. Кстати, попробовал сейчас свой тестовый пример на mail.ru натравить, оказалось, что и от <LINK> IE не в восторге.
Итак, тестовый пример:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, OleCtrls, SHDocVw, ComCtrls, ActiveX, MSHTML_TLB;

type
 TForm1 = class(TForm)
   WebBrowser: TWebBrowser;
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   PageControl1: TPageControl;
   TabSheet1: TTabSheet;
   TabSheet2: TTabSheet;
   Memo1: TMemo;
   TabSheet3: TTabSheet;
   Memo2: TMemo;
   Button4: TButton;
   TabSheet4: TTabSheet;
   Edit1: TEdit;
   Button5: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button4Click(Sender: TObject);
   procedure Button5Click(Sender: TObject);
 private
   { Private declarations }
   WebBrowser1: TWebBrowser;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 WebBrowser1 := TWebBrowser.Create(Self);
 WebBrowser1.Navigate("about:blank");
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 Document: IHTMLDocument2;
 V: OleVariant;
begin
 PageControl1.ActivePage := TabSheet1;
 WebBrowser.Navigate(Edit1.Text);
 // Без отображения (пусть даже в невидимом окне)
 // WebBrowser1 спотыкается на тегах <SCRIPT>
 // WebBrowser1.ParentWindow := TabSheet4.Handle; // Раскомментируем и все ОК
 WebBrowser1.Navigate(Edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 Document: IHTMLDocument2;
 Collection: IHTMLElementCollection;
 Element: IHTMLElement;
begin
 PageControl1.ActivePage := TabSheet1;
 // Этот метод модифицирует текст документа при помощи DHTML
 Document := WebBrowser.Document as IHtmlDocument2;
 Collection := Document.all;
 Collection := Collection.Tags("BODY") as IHTMLElementCollection;
 Element := Collection.Item(NULL, 0) as IHTMLElement;
 Element.InnerText := "Modifyed by DHTML";

 Document := WebBrowser1.Document as IHtmlDocument2;
 Collection := Document.all;
 Collection := Collection.Tags("BODY") as IHTMLElementCollection;
 Element := Collection.Item(NULL, 0) as IHTMLElement;
 if Assigned(Element) then
   Element.InnerText := "Modifyed by DHTML";
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 Document: IHTMLDocument2;
begin
 PageControl1.ActivePage := TabSheet2;
 // Этот метод позволяет просмотреть в TMemo код HTML
 // документа из TWebBrowser
 Document := WebBrowser.Document as IHtmlDocument2;
 Memo1.Text := ((Document.all.tags("HTML") as IHTMLElementCollection).Item(0, 0)
   as IHTMLElement).OuterHTML;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
 Document: IHTMLDocument2;
begin
 PageControl1.ActivePage := TabSheet3;
 // Этот метод позволяет просмотреть в TMemo код HTML
 // документа из TWebBrowser
 Document := WebBrowser1.Document as IHtmlDocument2;
 Memo2.Text := ((Document.all.tags("HTML") as IHTMLElementCollection).Item(0, 0)
   as IHTMLElement).OuterHTML;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 WebBrowser1.ParentWindow := TabSheet4.Handle;
 TabSheet4.TabVisible := True;
end;

end.


 
evvcom ©   (2006-05-15 00:31) [1]

Форма:

object Form1: TForm1
 Left = 234
 Top = 114
 Width = 783
 Height = 540
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 232
   Top = 4
   Width = 75
   Height = 25
   Caption = "Load"
   TabOrder = 0
   OnClick = Button1Click
 end
 object Button2: TButton
   Left = 316
   Top = 4
   Width = 75
   Height = 25
   Caption = "Change"
   TabOrder = 1
   OnClick = Button2Click
 end
 object Button3: TButton
   Left = 400
   Top = 4
   Width = 75
   Height = 25
   Caption = "HTML1"
   TabOrder = 2
   OnClick = Button3Click
 end
 object PageControl1: TPageControl
   Left = 0
   Top = 36
   Width = 775
   Height = 470
   ActivePage = TabSheet1
   Align = alBottom
   Anchors = [akLeft, akTop, akRight, akBottom]
   TabOrder = 3
   object TabSheet1: TTabSheet
     Caption = "WebBrowser"
     object WebBrowser: TWebBrowser
       Left = 0
       Top = 0
       Width = 767
       Height = 442
       Align = alClient
       TabOrder = 0
     end
   end
   object TabSheet2: TTabSheet
     Caption = "HTML1"
     ImageIndex = 1
     object Memo1: TMemo
       Left = 0
       Top = 0
       Width = 767
       Height = 442
       Align = alClient
       Lines.Strings = (
         "Memo1")
       TabOrder = 0
     end
   end
   object TabSheet3: TTabSheet
     Caption = "HTML2"
     ImageIndex = 2
     object Memo2: TMemo
       Left = 0
       Top = 0
       Width = 767
       Height = 442
       Align = alClient
       Lines.Strings = (
         "Memo2")
       TabOrder = 0
     end
   end
   object TabSheet4: TTabSheet
     Caption = "TabSheet4"
     ImageIndex = 3
     TabVisible = False
   end
 end
 object Button4: TButton
   Left = 484
   Top = 4
   Width = 75
   Height = 25
   Caption = "HTML2"
   TabOrder = 4
   OnClick = Button4Click
 end
 object Edit1: TEdit
   Left = 4
   Top = 4
   Width = 221
   Height = 21
   TabOrder = 5
   Text = "http://www.test.com/index.htm"
 end
 object Button5: TButton
   Left = 568
   Top = 4
   Width = 75
   Height = 25
   Caption = "Parent"
   TabOrder = 6
   OnClick = Button5Click
 end
end


 
evvcom ©   (2006-05-15 00:41) [2]

Теперь описание действий:

Жмем кнопку Load, загружается страничка в 2 броузера, один на закладке WebBrowser, другой не отображается. Кнопками HTML1 и HTML2 смотрим тексты в этих броузерах и видим разницу, что во 2-ом текст отображается некорректно. Если 2-му IE зададим ParentWindow (кнопка Parent), то IE после этого "корректирует свое понимание" загруженного (жмем еще раз HTML2).
Так вот, все бы ничего, задал бы ему родителя и делов-то, но надо парсер IE заставить работать в доп.потоке, а потому ни о каком "отображении" речи идти не может.
Кто-нибудь сталкивался с подобным? Может есть какой способ заставить IE выполнить те "магические" операции, которые он выполняет перед отображением для правильного понимания содержания документа?



Страницы: 1 вся ветка

Текущий архив: 2008.06.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
2-1212174519
Pi:=3.14...
2008-05-30 23:08
2008.06.29
Переход к запускному файлу


15-1211098247
No_Dead
2008-05-18 12:10
2008.06.29
Посоветуйте...


2-1212491944
ZENsan
2008-06-03 15:19
2008.06.29
Interface...


8-1182507646
leonidus
2007-06-22 14:20
2008.06.29
Ищу библиотеку для работы с RAW-файлами


2-1212401918
MaryM
2008-06-02 14:18
2008.06.29
Связать данные с TtreeView ом?