-
Помогите! Открываю страницу в IE. "Просмотр HTML-кода". Все содержимое разбито на несколько страниц (если можно так сказать), а именно: <html>...</html> потом несколько пустых строк, опять <html>...</html> несколько пустых строк. И так несколько раз. Использую TWebBrowser. Все хорошо работало, пока не наткнулся на вышеописанную ситуацию. А имено: в программе код: HTML := (doc.all.Item(NULL, 0) as IHTMLElement).OuterHTML; Получаю пустую строку. Причем, если делаю например, doc.forms.Length, то получаю ненулевое значение. Т.е., оно не совсем правильное, но более менее ожидаемое. Подскажите, как правильно обрабатывать такие "страницы" в TWebBrowser!
-
> stosha (15.01.2011 13:43:00) [0]
По стандарту только один <html> на документ.
-
> По стандарту только один <html> на документ. а эти, как их там ... фреймы! ? они вроде как давно "преданы анафеме", но поддерживаются же еще. хотя, тут конечно ситуация другая.
-
> sniknik (15.01.2011 19:34:02) [2]
Фреймы, хоть и преданы анафемы, но все равно это разные документы, так что противоречия нет.
-
Неужели нет решения? Ведь браузер-то обрабатывает их как-то. Все выглядит нормально в IE, FF, Opera. Корпоративный B2B портал китайский. Надо вынуть таблицы, бьюсь недели две уже. Кстати, с фреймами нормально все. Есть такая функция: Function GetFrame(WebBrowser: TWebBrowser; FrameNo: Integer): IWebbrowser2; var OleContainer: IOleContainer; enum: IEnumUnknown; unk: IUnknown; Fetched: PLongint; begin while WebBrowser.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; If Assigned(WebBrowser.document) then Begin Fetched := nil; OleContainer := WebBrowser.Document as IOleContainer; OleContainer.EnumObjects(OLECONTF_EMBEDDINGS, Enum); Enum.Skip(FrameNo); Enum.Next(1, Unk, Fetched); Result := Unk as IWebbrowser2; End Else Result := nil; end;
Вызываю: ... webBrowserFrame: IWebbrowser2; ... if Document.frames.Length > 0 then begin for i := 0 to Document.frames.Length - 1 do begin webBrowserFrame := GetFrame2(WebBrowser, Document, i); if webBrowserFrame <> nil then begin Document2 := webBrowserFrame.Document as IHtmlDocument2; if Document2 = nil then begin break; end; sourceHTML := (Document2.all.Item(NULL, 0) as IHTMLElement).OuterHTML; end; end; end;
|