Форум: "Corba";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Corba";
Текущий архив: 2008.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c