Bug im _FFWriteHTML

  • Hi,

    ich arbeite seit neuestem mit deiner UDF "FF.au3" um Firefox zu steuern.
    Übrigens eine tolle UDF 8o Danke dafür :thumbup:

    Beim experimentieren ist mir dabei ein Bug aufgefallen.
    Sobald im HTML-Quellcode ein Hochkomma (') vorkommt versagt die Funktion _FFWriteHTML.

    Hier ein einfaches Beispiel, das das Problem verdeutlicht.

    Beispiel _FFWriteHTML
    [autoit]


    #include <FF.au3>
    _FFStart()
    _FFWriteHTML("<head><title>Hello World!</title></head><body><div>Hello World!</div></body>", "html")
    MsgBox(64, "Pause!", "Weiter?")
    _FFWriteHTML("<head><title>Hello World!</title></head><body><div>Hello'World!</div></body>", "html")
    Exit

    [/autoit]

    Die Konsolenausgabe sieht hier folgendermaßen aus.

    Konsolenausgabe


    __FFStartProcess: ""D:\Programme\Mozilla Firefox\firefox.exe" -new-window "about:blank" -repl 4242
    _FFConnect: OS: WIN_XP WIN32_NT 2600 Service Pack 3
    _FFConnect: AutoIt: 3.3.6.1
    _FFConnect: FF.au3: 0.6.0.1b-5
    _FFConnect: IP: 127.0.0.1
    _FFConnect: Port: 4242
    _FFConnect: Delay: 2ms
    _FFConnect: Socket: 1648
    _FFConnect: Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 ( .NET CLR 3.5.30729; .NET4.0E)
    __FFSendJavaScripts: Sending functions to FireFox .......... done
    _FFLoadWait: . loaded in 75ms
    __FFSend: try{content.document.documentElement.innerHTML='<head><title>Hello World!</title></head><body><div>Hello World!</div></body>';}catch(e){'_FFCmd_Err';};
    __FFRecv: <head><title>Hello World!</title></head><body><div>Hello World!</div></body>
    __FFSend: try{content.document.documentElement.innerHTML='<head><title>Hello World!</title></head><body><div>Hello'World!</div></body>';}catch(e){'_FFCmd_Err';};
    __FFSend: ;
    __FFRecv:

    __FFWaitForRepl ==> Error return value: MozRepl ....>
    +>17:59:02 AutoIT3.exe ended.rc:0
    >Exit code: 0 Time: 31.638

    Das Problem wird vom folgendem String in der "FF.au3" verursacht.

    [autoit]


    $sCommand = StringFormat("content.document.%s.innerHTML='" & $sHTML & "';", $sCommand)

    [/autoit]


    Hier wird, so wie es sein soll, $sHTML von Hochkommas umschloßen, damit man $sHTML als String, der Eigenschaft innerHTML zuweisen kann.

    Da nun $sHTML wiederum selbst ein Hochkomma (') enthält, wird die Zuweisung wesentlich früher beendet als geplant.

    Um das Problem zu beseitigen muß also in $sHTML jedes Hochkomma (') maskiert werden.

    Gruß
    CD

    PS:
    Falls das Problem bekannt ist, dann entschuldige ich mich für den neuen Thread.
    Hab zwar die Suche kurz überflogen aber nichts vergleichbares Gefunden. :whistling:

  • Du kannst auch selber das Hochkommata mit einem Backslash für Javascript maskeiren denke ich.
    Außerdem sollte man auch Backslashes mit einem Backslash maskieren wenn ich mich recht erinnere.

    [autoit]

    $sHTML = StringReplace(StringReplace($sHTML, '\', '\\', 0, 1), "'", "\'", 0, 1)

    [/autoit]
  • Hi,

    yep, genauso hab ich es auch vorläufig gelöst ;)
    Wollte aber den Bug nicht für mich behalten, sondern mit euch teilen :D

    PS:
    Komisch, dass den noch keiner gemeldet hat.... ^^

  • Zitat

    Komisch, dass den noch keiner gemeldet hat....

    Hallo,

    die Funktion ist vermutlich zu uninteressant :) - die Funktion gibt es nur, weil in der der IE.au3 etwas ähnliches existiert, ein vernünftige Anwendung habe ich allerdings selbst noch nicht gefunden :D

    Einfacher und eleganter wäre es per XPath und/oder den Objekt-Funktionen die entsprechenden Values, Text-Contents usw. zu setzen, anstatt die ganze Seite neu zu schreiben.

    Grüße
    Stilgar

  • Einfacher und eleganter wäre es per XPath und/oder den Objekt-Funktionen die entsprechenden Values, Text-Contents usw. zu setzen, anstatt die ganze Seite neu zu schreiben.

    Stimmt, ich mag XPath 8)

    Dann probier ich das Ganze mit XPath und _FFObj

    [autoit]

    #include <FF.au3>
    _FFStart()
    _FFXPath("/html", "innerHTML='<head><title>Hello World!</title></head><body><div>Hello World!</div></body>'")
    MsgBox(64, "Pause!", "Weiter?")
    _FFXPath("//div[1]")
    _FFObj("xpath", "textContent", "Hello'World!")
    Exit

    [/autoit]

    8| Diesmal kommt der Fehler bei _FFObj :whistling:

    Konsolenausgabe

    8o ok, ok, ich gebs zu, ich habs ein bisschen provoziert :love:

    Gruß
    CD