2009-11-07 15 views
1

J'ai besoin d'extraire l'appel javascript en cas onlick défini dans le balisage suivant:Comment analyser le paramètre d'événement onclick javascript à l'aide de MSHTML?

<div style="cursor: pointer;" onclick='javascript:start("a", "b", "code");'>Click Here</div></div> 

C'est ce que je veux extraire de onclick comme une chaîne de texte: « javascript: start (« a », "b", "code"); ' Je suis novice dans l'utilisation de MSHTML et c'est ce que j'ai essayé jusqu'à présent et je n'arrive nulle part. Peut-être qu'il y a une meilleure façon de faire cela?

foreach (mshtml.IHTMLElement elm in (IHTMLElementCollection)doc.body.all) 
{ 
    if (elm.getAttribute("onclick", 0) != null) 
    { 
     if (elm.getAttribute("onclick", 0).ToString().Contains("javascript:start")) 
     { 
      Debug.WriteLine("Found!"); 
     } 
    }  
} 

Répondre

1

Je l'ai compris. Vérifiez simplement l'outerHTML de l'élément. elm.outerHTML.ToLower(). Contient ("javascript: start")

1

L'attribut onclick ne doit pas contenir de "javascript:". Il n'accepte pas une javascript: URL comme sa valeur. Il devrait juste contenir des expressions javascript. (Bien que, si vous incluez "javascript:", il soit juste traité par le moteur de script comme une étiquette sans effets indésirables).

à savoir <p onclick="alert('hello');">This is correct</p>

<p onclick="javascript:alert('hello');">This is not ideal.</p>

Alors en supposant que le balisage en cours d'analyse travaille correctement, votre code ci-dessus ne doit pas vérifier l'inclusion de la chaîne « javascript: ». Il devrait juste être:

if (elm.getAttribute("onclick", 0).ToString().Contains("start"))

0

Une autre façon d'obtenir ces données est par la fonction .getAttribute():

If oHTMLDivElement.hasAttribute("onclick") then 
    Debug.Print oHTMLDivElement.getAttribute("onclick") 
End If 

Cela suppose que 'oHTMLDivElement' est un objet MSHTML.HTMLDivElement.