Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   "Feature not implemented" bei der Analyse via MSHTML unter Win7 (https://www.delphipraxis.net/178795-feature-not-implemented-bei-der-analyse-via-mshtml-unter-win7.html)

Zwixx 28. Jan 2014 10:38

"Feature not implemented" bei der Analyse via MSHTML unter Win7
 
Ich verwende folgenden Code um die Tags eines TWebBrowsers zu ermitteln:

Delphi-Quellcode:
var
  Document: IHTMLDocument2;
  Tags: IHTMLElementCollection;
  Tag: IHTMLElement;
  Body: IHTMLElement2;
  a : IHTMLElementCollection;
  b : IInterface;
begin
  // Switch off scrollbars
  WebBrowser1.OleObject.document.body.style.overflowX := 'hidden';
  WebBrowser1.OleObject.document.body.style.overflowY := 'hidden';

  // Switch off borders
  WebBrowser1.OleObject.document.body.style.borderstyle := 'none';

  // Check for valid document: require IHTMLDocument2 interface to it
  if not Supports(WebBrowser1.OleObject.document, IHTMLDocument2, Document) then
    raise Exception.Create('Invalid HTML document');
  // Check for valid body element: require IHTMLElement2 interface to it
  a := IHTMLElementCollection(Document.all.tags('head'));
  b := a.item(null, 0);
  if not Supports(b, IHTMLElement2, Body) then
    raise Exception.Create('Can''t find <body> element');

  Tags := Body.getElementsByTagName('meta');

  // Scan through all tags in body
  for I := 0 to Pred(Tags.length) do
  begin
    Tag := Tags.item(I, EmptyParam) as IHTMLElement;
    if AnsiSameText(Tag.getAttribute('name', 0), 'zzz') then
...
Dieses Verfahren funktioniert unter Windows XP mit dem IE 8 sehr gut. Unter Windows 7 mit dem IE 9 allerdings kommt es in der Zeile " b := a.item(null, 0);" zu einer EOleException mit der Meldung "Nicht implementiert". Gibt es da eine einfache Lösung dies zu umgehen? Möglichst so, das es auf beiden System klappt?

Der schöne Günther 28. Jan 2014 11:28

AW: "Feature not implemented" bei der Analyse via MSHTML unter Win7
 
Ich kenne mich mit dem Thema nicht aus, aber nach der Doku zu IHTMLElementCollection::item sehe ich keinen Sinn, als ersten Parameter
Delphi-Quellcode:
nil
zu verwenden:
Zitat:

[in] VARIANT of type VT_I4 or VT_BSTR that specifies the object or collection to retrieve. If this parameter is an integer, it is the zero-based index of the object. If this parameter is a string, all objects with matching name or id properties are retrieved, and a collection is returned if more than one match is made.
Mal mit 0 versucht?

Zwixx 28. Jan 2014 13:48

AW: "Feature not implemented" bei der Analyse via MSHTML unter Win7
 
Ja, leider mit dem gleichen Ergebnis.

Thom 28. Jan 2014 15:00

AW: "Feature not implemented" bei der Analyse via MSHTML unter Win7
 
Delphi-Quellcode:
  a := IHTMLElementCollection(Document.all.tags('head'));
  [...]
Die Funktion tags liefert ein IDispatch- und kein IHTMLElementCollection-Interface. Deshalb geht ein harter Cast an dieser Stelle schief und der Versuch, die Funktion item aufzurufen, wird mit der korrekten Fehlermeldung quittiert, da IDispatch tatsächlich keine Funktion item unterstützt.
Besser wäre:
Delphi-Quellcode:
var
  i: IDispatch;
  [...]
begin
  [...]
  i := Document.all.tags('head');
  if not Supports(i, IHTMLElementCollection, a) then
    raise Exception.Create('Keine HTMLElementCollection');
  b := a.item(null, 0);
  [...]
end;

himitsu 28. Jan 2014 15:22

AW: "Feature not implemented" bei der Analyse via MSHTML unter Win7
 
Delphi-Quellcode:
a := Document.all.tags('head') as IHTMLElementCollection;

Ging inzwischen das AS nicht auch bei Interfaces? (in "neueren" Delphis)
(Da würde dann der Compiler das Supports intern versteckt aufrufen)

Thom 28. Jan 2014 17:11

AW: "Feature not implemented" bei der Analyse via MSHTML unter Win7
 
Ja, das würde hier auch gehen - mit der kleinen Einschränkung, daß dann nicht mehr ausgewählt werden kann, welche Exception im Fehlerfall erzeugt wird.

Zwixx 29. Jan 2014 08:08

AW: "Feature not implemented" bei der Analyse via MSHTML unter Win7
 
Hat funktioniert, vielen Dank :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz