我正在尝试读取一个Javascript变量的值,该变量是从我的表单中加载和调用WebBrowser控件中的。
例如:
index.html引用名为“test.js”的javascript文件。 在test.js中,创建并填充了几个变量。
然后,index.html调用此JS。
Index.html被加载并显示到WebBrowser控件中。
我已经找到了很多关于如何调用/调用驻留在web浏览器控件中的函数的帮助。但如何轻松读取变量值呢?
我正在尝试读取一个Javascript变量的值,该变量是从我的表单中加载和调用WebBrowser控件中的。
例如:
index.html引用名为“test.js”的javascript文件。 在test.js中,创建并填充了几个变量。
然后,index.html调用此JS。
Index.html被加载并显示到WebBrowser控件中。
我已经找到了很多关于如何调用/调用驻留在web浏览器控件中的函数的帮助。但如何轻松读取变量值呢?
你可以这样做:
Document.InvokeScript("eval", new object[] { "my_var_name" });
我认为你无法仅从JS中获取变量的值,因为你的C#将在js变量存在之前运行。我自己也遇到了同样的问题,无法直接获取js变量的值。你可以使用HtmlTextWriter方法来获取这些值。这将允许你使用C#渲染的js调用,以便访问变量的值。
例如:
protected override void RenderContents(HtmlTextWriter writer)
{
EnsureChildControls();
base.RenderContents(writer);
writer.BeginRender();
writer.RenderBeginTag(HtmlTextWriterTag.Script);
writer.AddAttribute(HtmlTextWriterAttribute.Type, "text/javascript");
writer.Write("myJavaScriptVar = (\" + myC#Var + \")");
writer.RenderEndTag();
不能保证百分之百可行,但我知道你可以用这种方式访问你的js变量。我在其他项目中也这样做过。希望能对你有所帮助。
GetGlobalVariable()
的方法。(它使用Juan's answer中的Document.InvokeScript
方法。+1)
假设您在全局范围内创建了JavaScript变量,如下所示:var foo = "bar";
var person = {};
var person.name = "Bob";
GetGlobalVariable()
方法来访问这些值。像这样。(您可能需要设置一个计时器来不断检查变量是否已填充。)
var foo = GetGlobalVariable(webBrowser, "foo");
var name = GetGlobalVariable(webBrowser, "person.name");
这里是 GetGlobalVariable()
方法。请注意,它检查变量引用的每个部分以避免异常。
private object GetGlobalVariable(WebBrowser browser, string variable)
{
string[] variablePath = variable.Split('.');
int i = 0;
object result = null;
string variableName = "window";
while (i < variablePath.Length)
{
variableName = variableName + "." + variablePath[i];
result = browser.Document.InvokeScript("eval", new object[] { variableName });
if (result == null)
{
return result;
}
i++;
}
return result;
}
看一下HtmlWindow类。你可以从WebBrowser.Document.Window
获取它的实例。如果你的js变量具有全局作用域,它们将属于Window对象,并且应该可以从C#中的WebBrowser.Document.Window.DomWindow
访问。
我认为这实际上是一个作用域问题。如果你包含了一个名为test.js的文件,并且在该文件中有以下代码:
var myVariable;
然后,该变量将以全局范围创建,并可从页面的任何位置以及包含在其中的任何其他JavaScript文件中进行访问。如果您像那样在函数外部声明变量,它将被创建为具有全局范围的变量。
一个想法。如果您无法在主页中访问变量,请确保在页面上尝试使用它之前,已经包含了声明和赋值的脚本。您可能会遇到执行顺序问题。