2010-03-27 15 views
1

Comment puis-je évaluer javascript document.write en texte brut en C#? Je suis en train d'évaluer ceci:Évaluation de javascript en texte brut en utilisant C#, .NET 3.5

<script type="text/javascript"> 
a=2;b=3; 
document.write(a+"_"+y); 
</script> 

à ceci:

2_3 
+0

Vous essayez d'obtenir le résultat de la fonction côté client à la fonction côté serveur? –

+0

C'est une fonction côté client sur une page HTML téléchargée, je veux juste l'évaluer. – Dmi

Répondre

2

De votre commentaire, « il est une fonction côté client sur une page HTML téléchargé », il semble que vous faites une sorte de scraping/crawling d'écran, où le HTML/JavaScript ne fait pas une demande de client à votre application? Si je comprends bien que c'est ce que vous cherchez, alors vous avez besoin d'un interprète qui peut "parler" JavaScript. C# ne peut pas faire cela, donc la meilleure chose est de lancer un composant dans votre application C# qui est capable de comprendre/interpréter (et donc évaluer) JavaScript.

Je recommande de regarder dans le contrôle WebBrowser et HtmlDocument.DomDocument, charger votre page HTML téléchargée dans un contrôle HtmlDocument/WebBrowser, il sera exécuté et il inclura le résultat de la fonction JavaScript dans le HTML (puisque le document .write manipule le DOM et le HTML résultant).

Si vous créez une application simple des formes et faites glisser un contrôle du navigateur Web sur elle, voici un exemple que je viens d'écrire pour tester cette théorie sur:

using System; 
using System.Windows.Forms; 
// Make sure to add COM reference to "Microsoft HTML Object Library" 

namespace TheAnswer 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      webBrowser1.Url = new Uri("about:blank"); 
     } 


     private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      MessageBox.Show("Loaded!"); 

      string testHtml = @" 
       <html> 
        <head> 
         <script type=""text/javascript""> 
          var a=2;var b=3; 
          document.write(a+""_""+b); 
         </script> 
        </head> 
        <body>Hello there!</body> 
       </html>"; 


      mshtml.IHTMLDocument2 htmlDoc = (mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument; // IHTMLDocument2 has the write capability (IHTMLDocument3 does not) 
      htmlDoc.close(); 
      htmlDoc.open("about:blank"); 

      object html = testHtml; 
      htmlDoc.write(html); 
      html = null; 

     } 

    } 
} 

Il est évident que d'ici, vous pouvez brancher votre " téléchargé "HTML dans le document HTML et l'exécuter; et vous risquez de rencontrer de nombreux obstacles en cours de route si vous traitez une multitude de types de pages, etc. Si vous êtes toujours à la recherche d'un type de page similaire et êtes sûr de certains comportements attendus ou de certaines fonctions javascript, vous pourrez peut-être obtenir des résultats. Il est vraiment difficile d'en dire plus compte tenu du peu d'informations que vous avez fournies concernant votre projet. J'espère que cela aide et est ce que vous essayiez d'accomplir. Faites le moi savoir!

EDIT: Wow, je n'avais pas réalisé que cette question avait 2 ans! de toute façon eu du plaisir à y répondre!

+0

Merci. J'essayais de lire les nouvelles, la météo, etc. à partir d'une petite liste de téléscripteurs en temps réel. Je n'ai rien trouvé de particulièrement utile, j'ai donc écrit un petit interprète Javascript pour exécuter les scripts présents. – Dmi