C# - 读取JavaScript文件和访问变量

时间:2014-07-27 05:28:29

标签: c# javascript

我有一个JavaScript文件,其中定义了变量并为其分配了值。是否可以使用C#读取.js文件并轻松检索变量和值?我知道变量名称是什么,但值将是一个json字符串。我希望我不必诉诸正则表达式。

编辑:我无法控制JavaScript文件的内容。第三方将文件放到某个位置,我需要将其取出,读取并解析它。

编辑2:好的,忘记我提到了json。这实际上与我的问题无关......在这一点上,这似乎没有一个简单的解决方案。所以我一行一行地读取.js文件,搜索变量名,然后获取值。以下代码供参考。

using (StreamReader r = new StreamReader("myFile.js"))
{
  while(r.Peek() >= 0)
    {
      var line = r.ReadLine();
      if(line.IndexOf("myVariableName") > -1)
      {
         var arr = line.split("=");
         var variable = arr[0].Trim();
         var value = arr[1].Trim();
      }
    }
}

2 个答案:

答案 0 :(得分:2)

我在浏览器帮助程序对象中遇到了类似的问题,我需要创建该文件以从Web生成的报告中提取数据并将其存储在本地文件系统中。

我按照以下方式访问js值:

mshtml.IHTMLDocument document = (mshtml.IHTMLDocument)this.Explorer.IWebBrowser_Document;
object script = document.Script;

if (script != null)
{
    // Make the call:
    var jsvar = script.GetType().InvokeMember("eval", BindingFlags.InvokeMethod, null, script, new object[] { "HIS_VisitNumber" });

    // Cast...
    _strHISVisit = (string)jsvar;

    // Release the script object, and possibly the document object.
    Marshal.ReleaseComObject(script);
}

这里this.Explorer是可以通过Band Object(BHO)获得的资源管理器对象。

但是,当然,只有当您能够利用具有加载和执行js的所有工具的浏览器(IE)时,这种方法才有可能。

如果你不能做这样的事情,我猜你需要的是一个完整的C#js解析器,还是我不能正确理解你的问题?

在后一种情况下,您可以使用Javascript .NET

答案 1 :(得分:1)

如果您是Web开发人员并且想要将数据从JavaScript文件(客户端)发送到C#文件(服务器端),则可以使用jQuery Ajax。您可以将变量传递给C#文件中的函数。请记住,您必须将[WebMethod]属性添加到C#函数中,该函数必须为static

$.ajax({
      type: "post",
      url: "Default.aspx/YourMethodName",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify({ varOne: one , varTwo:two }),
                success: function (v) {
                    alert("Success");
                },
                error: function (error) {
                    alert("Error");
                },
                complete: function () {
                    alert("Complete");
                }
            });