Конференция "Сети" » Пустрой OuterHTML [D7, WinXP]
 
  • stosha © (15.01.11 13:43) [0]
    Помогите!
    Открываю страницу в IE. "Просмотр HTML-кода". Все содержимое разбито на несколько страниц (если можно так сказать), а именно: <html>...</html> потом несколько пустых строк, опять <html>...</html> несколько пустых строк. И так несколько раз.
    Использую TWebBrowser.
    Все хорошо работало, пока не наткнулся на вышеописанную ситуацию. А имено: в программе код:
       HTML := (doc.all.Item(NULL, 0) as IHTMLElement).OuterHTML;
    Получаю пустую строку. Причем, если делаю например, doc.forms.Length, то получаю ненулевое значение. Т.е., оно не совсем правильное, но более менее ожидаемое.
    Подскажите, как правильно обрабатывать такие "страницы" в TWebBrowser!
  • Anatoly Podgoretsky © (15.01.11 15:11) [1]
    > stosha  (15.01.2011 13:43:00)  [0]

    По стандарту только один <html> на документ.
  • sniknik © (15.01.11 19:34) [2]
    > По стандарту только один <html> на документ.
    а эти, как их там ... фреймы! ? они вроде как давно "преданы анафеме", но поддерживаются же еще.
    хотя, тут конечно ситуация другая.
  • Anatoly Podgoretsky © (15.01.11 21:54) [3]
    > sniknik  (15.01.2011 19:34:02)  [2]

    Фреймы, хоть и преданы анафемы, но все равно это разные документы, так что
    противоречия нет.
  • stosha © (16.01.11 21:38) [4]
    Неужели нет решения? Ведь браузер-то обрабатывает их как-то. Все выглядит нормально в 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;
 
Конференция "Сети" » Пустрой OuterHTML [D7, WinXP]
Есть новые Нет новых   [134436   +25][b:0][p:0]