IE - Seitenaufruf beschränken

  • ich würde die URL immer beim Klick auf den Go Button Prüfen und dann erst "wenn die URL OK" _IENavigate() andernfalls halt nichts oder so :D


    Du finndest auf (fast) jeder Website Links mit denen du auf andere Webseiten kommen kannst, dadurch ist durch diese Lösung mit dem Prüfen des Go-Buttons das Tor zur grossen "feindlichen" Welt nur zum Teil geschlossen, die bestehende Lücke ist so gross, dass sie auch ein DAU findet.

    Dass mein Lösungansatz bei IE < 8.0 nicht funktioniert ist schade,

    mfg autoBert

  • Guten Abend :)

    Ich habe deinen (@Bert) Vorschlag noch nicht getestet, werde ich aber gleich. Nach der Problematik, die ich dir gestern schon geschildert habe, ist es eigentlich am sinnvollsten, wirklich mit den Events zu arbeiten. Das scheint aber aus irgendwelchen Gründen nicht richtig zu funktionieren.

    Zur Zeit habe ich folgendes innerhalb der While-Schleife im Einsatz:

    [autoit]

    $arr = StringRegExp(_IEPropertyGet($oIE, "locationurl"), '^(res:\/\/|http:\/\/|https:\/\/)?(www.)?([^\/]+)', 1)

    [/autoit][autoit][/autoit][autoit]

    If $arr[2] <> 'autoit.de' Then
    ; Zugriff unterbinden
    EndIf

    [/autoit]

    Den Regex werde ich bei Gelegenheit mal anpassen :)

    [autoit]

    IEEvent_BeforeNavigate2

    [/autoit]

    scheint eine gute Alternative zu sein, jedoch befürchte ich, dass es aufgrund des o.g. Problems nicht wirklich funktionieren wird, zumindest nicht fehlerfrei.

    Danke trotzdem soweit, ich werde mir das Ganze gleich in aller Ruhe ansehen und mich dann noch einmal mit den Ergebnissen melden :)

    EDIT:

    [autoit]

    Func IEEvent_BeforeNavigate2($IEpDisp, $IEURL)
    $arr = StringRegExp($IEURL, '^(res:\/\/|http:\/\/|https:\/\/)?(www.)?([^\/]+)', 1)

    [/autoit][autoit][/autoit][autoit]

    If $arr[2] <> 'autoit.de' Then
    _IEDocWriteHTML($IEpDisp, 'Fehler')
    EndIf
    EndFunc ;==>_IEEvent_BeforeNavigate2

    [/autoit]

    So geht's schonmal nicht. Wahrscheinlich, weil dadurch alle Frames ausgelesen werden und dadurch eine Zugriffsverletzung auftritt, oder was weiß ich.

    [autoit]

    C:\Program Files (x86)\AutoIt3\Include\IE.au3 (3767) : ==> Variable must be of type "Object".:
    $IEComErrorScriptline = $oIEErrorHandler.scriptline
    $IEComErrorScriptline = $oIEErrorHandler^ ERROR

    [/autoit]

    bzw:

    [autoit]

    --> IE.au3 V2.4-0 Error from function _IELoadWait, $_IEStatus_InvalidDataType
    C:\Program Files (x86)\AutoIt3\Include\IE.au3 (3767) : ==> Variable must be of type "Object".:
    $IEComErrorScriptline = $oIEErrorHandler.scriptline
    $IEComErrorScriptline = $oIEErrorHandler^ ERROR

    [/autoit]

    Ich hatte auch versucht, die Navigation abzubrechen und dann die Fehlermeldung anzeigen zu lassen. Das Problem bleibt leider das Selbe.

    Folglich kann ich mit IEEvent_BeforeNavigate2 nichts anfangen und muss das Ganze weiterhin in der Hauptfunktion ausführen.

    4 Mal editiert, zuletzt von SoftCreatR (10. Januar 2012 um 20:00)

  • Hiho,

    ich habe gerade mal ein wenig meine Includes und ein paar Beispiele durchforstet und bin zumindest was das extrahieren des Hostnamen betrifft, auf etwas nützliches gestoßen:

    [autoit]

    Global Const $URL_PART_HOSTNAME = 2
    Global Const $URL_PART_PASSWORD = 4
    Global Const $URL_PART_PORT = 5
    Global Const $URL_PART_QUERY = 6
    Global Const $URL_PART_SCHEME = 1
    Global Const $URL_PART_USERNAME = 3

    [/autoit][autoit][/autoit][autoit]

    Func _WinAPI_UrlGetPart($sUrl, $iPart)

    [/autoit][autoit][/autoit][autoit]

    Local $Ret = DllCall('shlwapi.dll', 'uint', 'UrlGetPartW', 'wstr', $sUrl, 'wstr', '', 'dword*', 4096, 'dword', $iPart, 'dword', 0)

    [/autoit][autoit][/autoit][autoit]

    If @error Then
    Return SetError(1, 0, '')
    Else
    If $Ret[0] Then
    Return SetError(1, $Ret[0], '')
    EndIf
    EndIf
    Return $Ret[2]
    EndFunc ;==>_WinAPI_UrlGetPart

    [/autoit][autoit][/autoit][autoit]

    _WinAPI_UrlGetPart($Url, $URL_PART_HOSTNAME)

    [/autoit]