使用C#,.NET3.5将javascript评估为纯文本

使用C#,.NET3.5将javascript评估为纯文本,c#,.net,javascript,evaluate,C#,.net,Javascript,Evaluate,如何计算的文档。用C#将javascript编写为纯文本?我正试图评估这一点: <script type="text/javascript"> a=2;b=3; document.write(a+"_"+y); </script> 从你的评论中,“这是下载HTML页面上的客户端函数”,听起来你在做某种屏幕抓取/抓取,HTML/JavaScript没有向你的应用程序发出客户端请求 如果我正确地理解这就是您所寻求的,那么您需要一个能够“说”JavaScript的解释器。C#

如何计算的文档。用C#将javascript编写为纯文本?我正试图评估这一点:

<script type="text/javascript">
a=2;b=3;
document.write(a+"_"+y);
</script>
从你的评论中,“这是下载HTML页面上的客户端函数”,听起来你在做某种屏幕抓取/抓取,HTML/JavaScript没有向你的应用程序发出客户端请求

如果我正确地理解这就是您所寻求的,那么您需要一个能够“说”JavaScript的解释器。C#无法做到这一点,因此下一个最好的方法是在你的C#应用程序中启动一个能够理解/解释(并因此评估)JavaScript的组件

我建议查看WebBrowser控件和HtmlDocument.DomDocument,将下载的HTML页面加载到HtmlDocument/WebBrowser控件中,它将运行,并在HTML中包含JavaScript函数的结果(因为document.write操作DOM和生成的HTML)

如果您创建一个简单的表单应用程序,并将web浏览器控件拖到该应用程序上,我刚刚编写了一个示例来验证这一理论:

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;

        }

    }
}
使用系统;
使用System.Windows.Forms;
//确保将COM引用添加到“Microsoft HTML对象库”
名称空间答案
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有void Form1\u加载(对象发送方、事件参数e)
{
Url=newURI(“about:blank”);
}
私有无效webBrowser1\u文档已完成(对象发送者,WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show(“已加载!”);
字符串testHtml=@”
变量a=2;变量b=3;
文件。写(a+“”“\uuu”“+b);
你好!
";
mshtml.IHTMLDocument2 htmlDoc=(mshtml.IHTMLDocument2)webBrowser1.Document.DomDocument;//IHTMLDocument2具有写入功能(IHTMLDocument3没有)
htmlDoc.close();
htmlDoc.open(“关于:空白”);
对象html=testHtml;
htmlDoc.write(html);
html=null;
}
}
}
显然,从这里,您可以将“下载的”HTML插入HTML文档并执行它;如果你正在处理大量不同类型的页面,你可能会遇到很多障碍;如果您总是抓取类似类型的页面,并且确定某些预期行为或javascript函数,那么您可能能够获得一些结果。考虑到你提供的关于你的项目的信息量很少,真的很难说得更多

我真的希望这对你有所帮助,这也是你一直试图实现的目标。让我知道


编辑:哇,我还没意识到这个问题才2岁!不管怎么说,回答这个问题很有趣

您正在尝试将客户端函数的结果转换为服务器端函数?这是下载的HTML页面上的客户端函数,我只想对其进行评估。谢谢。我正试图从一小部分实时行情表中阅读新闻、天气等。我没有遇到任何特别有用的东西,所以我编写了一个小的Javascript解释器来运行任何脚本。
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;

        }

    }
}