Wie man Elemente von Namen in Delphi Chromium Embedded?

Zu einem bestimmten DOM-Knoten eingebettet in die aktuelle web-Dokument von einem TChromium Instanz, mittels seiner ID, die Sie verwenden ICefDomDocument.getElementById(). Aber wie findet man Elemente, die durch das NAME-Attribut? Javascript ist document.getElementsByName () - Methode und TWebBrowser (die wraps IE) hat einen ähnlichen Anruf, aber ich kann nicht herausfinden, wie dies mit TChromium. Ich muss einige DOM-Elemente, die über NAME-Attribute, aber keine ID-Attribute. Ich suchte die ceflib Einheit und nicht sehen alles, was es tun würde.

Seite Frage. Wenn jemand einen link zu einer TChromium "Rezepte" style Website oder Dokument, das ich nutzen könnte.

UPDATE: Beim warten auf eine Antwort ich habe mit den folgenden code für das tun von getElementsbyName(). Ich würde gerne etwas schneller als das Scannen des gesamten DOM-Baum. Wenn Sie sehen, dass etwas falsch im code lassen Sie es mich wissen:

type
    TDynamicCefDomNodeArray = array of ICefDomNode;


// Given a Chromium document interface reference and a NAME attribute to search for,
//  return an array of all DOM nodes whose NAME attribute matches the desired.
function getElementsByName(ADocument: ICefDomDocument; theName: string): TDynamicCefDomNodeArray;

    // Get all the elements with a particular NAME attribute value and return
    //  an array of them.
    procedure getElementsByName1(intfParentNode: ICefDomNode; theName: string; var aryResults: TDynamicCefDomNodeArray);
    var
        oldLen: integer;
        intfChildNode: ICefDomNode;
        theNameAttr: string;
    begin
        Result := nil;
        intfChildNode := nil;

        if Assigned(intfParentNode) then
        begin
            // Attributes are case insensitive.
            theNameAttr := intfParentNode.GetElementAttribute('name');

            if AnsiSameText(theNameAttr, theName) then
            begin
                // Name attribute match.  Add it to the results array.
                oldLen := Length(aryResults);
                SetLength(aryResults, oldLen + 1);
                aryResults[oldLen] := intfParentNode;
            end; // if AnsiSameText(intfParentNode.Name, theName) then

            // Does the parent node have children?
            if intfParentNode.HasChildren then
            begin
                intfChildNode := intfParentNode.FirstChild;

                // Scan them.
                while Assigned(intfChildNode) do
                begin
                    getElementsByName1(intfChildNode, theName, aryResults);

                    if Assigned(intfChildNode) then
                        intfChildNode := intfChildNode.NextSibling;
                end;
            end; // if intfParentNode.HasChildren then
        end; // if Assigned(intfParentNode) then
    end;

    // ---------------------------------------------------------------

var
    intfCefDomNode: ICefDomNode;
begin
    intfCefDomNode := nil;
    Result := nil;

    if Assigned(ADocument) then
    begin
        // Check the header.
        intfCefDomNode := ADocument.Document;

        if Assigned(intfCefDomNode) then
        begin
            // Check the parent.
            getElementsByName1(intfCefDomNode, theName, Result);
        end; // if Assigned(intfCefDomNode) then
    end; // if Assigned(ADocoument) then
end;

// ---------------------------------------------------------------
Ich glaube nicht, dass es klug ist, sich zu vermischen und match 10 Jahre alte Technik mit dem Stand der Technik Zeug und erwarten, dass es zu einem gefunden und stabile Lösung. In diesem speziellen Fall, TChromium nicht unterstützt Delph 6. code.google.com/p/delphichromiumembedded
TChromium nicht unterstützt Delphi 6, aber (es ist kein Paket für Sie), aber es bedeutet nicht, es konnte nicht dort arbeiten. Ich habe Delphi 2009, die auch nicht unterstützt, aber ein Blick in die Quelle, es gibt nichts, was hemmen könnte der Verbrauch da 😉
wenn mein Geist dient mir gut genug, Delphi 7 eingeführt, die durchaus ein paar fixes in Bezug auf Verpackung COM-Zeug. Das könnte ein Grund für die nicht-Unterstützung von Delphi 6. Ich würde empfehlen, Robert, überprüfen Sie diese Annahme mit der TChromium team.
Ich glaube, so. Die drei Delphi-Einheiten, die ich Verwandte, Chrom: cef, ceflib, ceffilescheme. Auch ich habe TChromium verfügbar in meine Komponenten-palette und können legen Sie es auf einem Formular.

InformationsquelleAutor Robert Oschler | 2012-05-20

Schreibe einen Kommentar