WebKit URLs

02/05/2012 - 07:15 von Hermie | Report spam
Hallo!

Nochmal zum WebKit-Browser-Control:

Ich hatte schon mal gefragt, wie man die links ausliest. Das
funktioniert soweit auch, aber ist echt kompliziert.

Ich habe zu jedem link eine "Base-URL", eine "URL" und eine "Add-URL".
Die hole ich mir durch den unten angehàngten Code.

Beispiel:

url: #content
base: http://www.google.com/support/accounts?hl=en
add: http://support.google.com/accounts/?hl=en

Ich schaue mir jetzt immer in Firefox an, wie diese 3 Dinger kombiniert
werden, um den endgültigen Link zu erhalten, aber das ist so schwierig,
und ich habe mittlerweile eine riesige If-Then-Bedingung dafür.

Kann es wirklich sein, dass WebKit die Interpretation auf so brutale
Weise dem "Benutzer" überlàsst?

Liebe Grüße,
Hermann





Private Sub pEnumerateLinksForFrame(Frame As IWebFrame)

If Frame Is Nothing Then
Exit Sub
End If

Dim Doc As WebKit.IDOMDocument
' Set Doc = Frame.DOMDocument
Dim e As WebKit.IDOMHTMLElement
' Set e = Doc.documentElement

Dim s$
's = e.innerText

'Debug.Print s

Dim i As Long
Dim NodeList As IDOMNodeList
Dim Node As IDOMNode
Dim LnkElmt As IDOMHTMLElement

m_sCurrentRequestURL = Frame.DataSource.request.URL

Dim sInit$
sInit = Frame.DataSource.initialRequest.URL
'Debug.Print "frame.name: " & Frame.Name & ", initialrequest:" &
Frame.DataSource.initialRequest.URL

Set NodeList = Frame.DOMDocument.GetElementsByTagName("a")
If NodeList.length = 0 Then
Exit Sub
End If

'Debug.Print "Start Enumeration von Link-Tags"

For i = 0 To NodeList.length - 1

Set Node = NodeList.Item(i)
Set LnkElmt = Node 'cast von IDOMNode auf IDOMHTMLElement

Dim sInnerText$
Dim sInnerHTML$
sInnerText = LnkElmt.innerText
sInnerHTML = LnkElmt.innerHTML

Dim sLinkText$
sLinkText = sInnerText
If Len(sLinkText) = 0 Then

Dim sOther$
sOther = ""

If Len(sOther) = 0 Then
sOther = pExtractAlt(sInnerHTML)
End If
If Len(sOther) = 0 Then
sOther = pExtractP(sInnerHTML)
End If
If Len(sOther) = 0 Then
sOther = pExtractMostProbable(sInnerHTML)
End If
If Len(sOther) = 0 Then
sOther = sInnerHTML
End If
' Debug.Print sInnerHTML
sLinkText = sOther
End If

Dim sURL$
sURL = pGetLink(LnkElmt)

pAddToLinks sInit, m_sCurrentRequestURL, sLinkText, sURL
Next i

(...)

Private Function pGetLink(ByRef LnkElmt As IDOMHTMLElement) As String

If Not LnkElmt Is Nothing Then
Dim e&
For e = 0 To LnkElmt.Attributes.length - 1
If LnkElmt.Attributes.Item(e).nodeName = "href" Then
Dim Node As IDOMNode
Set Node = LnkElmt.Attributes.getNamedItem("href")
If Not Node Is Nothing Then
Dim sURL$
sURL = Node.textContent
pGetLink = sURL
Debug.Assert Len(sURL) > 0
End If
End If
Next e
End If

End Function
 

Lesen sie die antworten

#1 Hermie
02/05/2012 - 08:37 | Warnen spam
Hier mal ein Beispiel, was da Wildes passiert:

In der Zeile "pAddToLinks" ganz unten im dargestellten Code habe ich die
folgenden Werte:

sLinkText: Datenschutzerklàrung & Nutzungsbedingungen
sUrl: /intl/de/policies/
sInit: http://www.google.com/intl/de/policies/
m_sCurrentRequestURL: http://www.google.com/intl/de/policies/

Irgendwann kann da noch nicht stimmen, denke ich.

Liebe Grüße,
Hermann

Private Sub pEnumerateLinksForFrame(Frame As IWebFrame)

If Frame Is Nothing Then
Exit Sub
End If

Dim Doc As WebKit.IDOMDocument
' Set Doc = Frame.DOMDocument
Dim e As WebKit.IDOMHTMLElement
' Set e = Doc.documentElement

Dim s$
's = e.innerText

'Debug.Print s

Dim i As Long
Dim NodeList As IDOMNodeList
Dim Node As IDOMNode
Dim LnkElmt As IDOMHTMLElement

m_sCurrentRequestURL = Frame.DataSource.request.URL
' Debug.Print Frame.DOMDocument.namespaceURI
Dim sInit$
sInit = Frame.DataSource.initialRequest.URL
'Debug.Print "frame.name: " & Frame.Name & ", initialrequest:" &
Frame.DataSource.initialRequest.URL

Set NodeList = Frame.DOMDocument.GetElementsByTagName("a")
If NodeList.length = 0 Then
Exit Sub
End If

'Debug.Print "Start Enumeration von Link-Tags"

For i = 0 To NodeList.length - 1

Set Node = NodeList.Item(i)
Set LnkElmt = Node 'cast von IDOMNode auf IDOMHTMLElement

Dim sInnerText$
Dim sInnerHTML$
sInnerText = LnkElmt.innerText
sInnerHTML = LnkElmt.innerHTML

Dim sLinkText$
sLinkText = sInnerText
If Len(sLinkText) = 0 Then

Dim sOther$
sOther = ""

If Len(sOther) = 0 Then
sOther = pExtractAlt(sInnerHTML)
End If
If Len(sOther) = 0 Then
sOther = pExtractP(sInnerHTML)
End If
If Len(sOther) = 0 Then
sOther = pExtractMostProbable(sInnerHTML)
End If
If Len(sOther) = 0 Then
sOther = sInnerHTML
End If
' Debug.Print sInnerHTML
sLinkText = sOther
End If

Dim sURL$
sURL = pGetLink(LnkElmt)

pAddToLinks sInit, m_sCurrentRequestURL, sLinkText, sURL
Next i

Ähnliche fragen