Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1212329213
BasUrban
2008-06-01 18:06
2008.06.29
Поверх всего


15-1210164451
NailMan
2008-05-07 16:47
2008.06.29
Вынужденно перешел на платформу Intel :-((


2-1212337033
Ceil
2008-06-01 20:17
2008.06.29
Подскажите


2-1212121612
Dymok
2008-05-30 08:26
2008.06.29
Как узнать путь к каталогу документов пользователя


15-1210851293
Marij
2008-05-15 15:34
2008.06.29
PageControl





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский