Browsercontrol DOM HTMLElement.SetAttribute("onclick","value")

08/09/2009 - 11:58 von Thomas Hübner | Report spam
Hi NG,

Ich frage mich ob die SetAttribute von HTMLElement nicht richtig
funktioniert. Wenn ich einem HTMLElement das Attribut "onclick"
zufügen will, funktioniert das nicht. Andere Attribute funktionieren,
scheinbar nur Handler nicht. Folgender Versuchsaufbau:

Eine neue Form und ein Browsercontrol darauf.
Folgenden Code in die Form einfügen:

Public Class Form1
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles Me.Load

WebBrowser1.Navigate("about:blank")
End Sub

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As
System.Object, _
ByVal e As
System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) _
Handles WebBrowser1.DocumentCompleted

With WebBrowser1.Document

For i = 1 To 5
Dim iDiv As HtmlElement = .CreateElement("div")
iDiv.Id = i.ToString
iDiv.InnerHtml = "Test " & i
iDiv.SetAttribute("onclick", "javascript:alert
('foo');")
.Body.AppendChild(iDiv)
Next

For i = 1 To 5
Dim iDiv As HtmlElement = .CreateElement("div")
iDiv.Id = i.ToString
iDiv.InnerHtml = "<span onclick=""javascript:alert
('foo');"">" & _
"Span Test " & i &
" </span>"
.Body.AppendChild(iDiv)
Next

End With
End Sub
End Class

In der oberen Schleife versuche ich das "onclick" Attribut/ Event mit
SetAttribute() zuzuweisen. Das funktioniert nicht.
In der unteren Schleife füge ich "dirty" in den InnerHTML des Div
Elements noch einen Span ein nebst onclick Attribut/ Event. Das
funktioniert. Nun ist aber mein Problem, das ich 500 solcher div's im
Browsercontrol brauche. D.h. der Sourcecode soll so klein wie möglich
werden. Ungern würde ich mit der Lösung aus der 2. Schleife arbeiten.
Ebenso ungern würde ich die Div's als InnerHTML des übergeordneten
Elements anlegen.

Gibt es eine VB Möglichkeit, das onclick Attribut/ Event eines
HTMLElementes zu setzen? Ich möchte das Event nicht in VB haben
(AttachEvent) sondern nur innerhalb des Document

Gruß,
Thomas
 

Lesen sie die antworten

#1 Martin Honnen
08/09/2009 - 12:22 | Warnen spam
Thomas Hübner wrote:


Dim iDiv As HtmlElement = .CreateElement("div")
iDiv.Id = i.ToString
iDiv.InnerHtml = "Test " & i
iDiv.SetAttribute("onclick", "javascript:alert
('foo');")



IE/MSHTML erlaubt folgendes:
Dim div As HtmlElement = _
.CreateElement("<div onclick=""alert('test');"">")
du kannst also Attribute direkt bei der Erzeugung des Elements per
CreateElement angeben.
Damit klappt der onclick-Handler hier bei mir unter Windows XP mit IE 8.


Martin Honnen MVP XML
http://msmvps.com/blogs/martin_honnen/

Ähnliche fragen