首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Web浏览器控件读取Javascript变量

从Web浏览器控件读取Javascript变量
EN

Stack Overflow用户
提问于 2011-07-30 01:03:47
回答 6查看 16.8K关注 0票数 11

我正在尝试读取从表单上的WebBrowser控件加载和调用的Javascript变量的值。

示例:

index.html指的是test.js上名为“test.js”的javascript,创建并填充了几个变量。

然后,index.html调用此JS。

在WebBrowser控件中加载并显示Index.html。

我找到了很多关于如何调用/调用驻留在web浏览器控件中的函数的帮助。如何轻松读取变量值?

EN

回答 6

Stack Overflow用户

发布于 2011-10-25 12:44:12

你可以这样做:

代码语言:javascript
复制
Document.InvokeScript("eval", new object[] { "my_var_name" });
票数 10
EN

Stack Overflow用户

发布于 2011-07-30 05:13:49

您可以使用IHTMLDocument::Script来检索脚本引擎的自动化接口。如果在C#中使用Windows Forms use浏览器控件,这意味着将HtmlDocument.DomDocument属性强制转换为mshtml.IHTMLDocument。对于WPF,您可以直接转换文档。

全局变量作为属性添加到脚本引擎中,全局函数作为方法添加到脚本引擎中。在IE9之前,如果您知道这些函数/变量的名称,就可以使用IDispatch接口来访问它们。HtmlDocument.InvokeScript和WPF的WebBrowser.InvokeScript很好地总结了这一点,但仅适用于System.Reflection.BindingFlags.InvokeMethod。对于访问变量,您需要在调用Invoke时传递DISPATCH_PROPERTYGET,即在托管代码中使用BindingFlags.GetProperty。

手动后期绑定并不有趣,如果你想知道后期绑定有多费力,请查看Binding for Office automation servers with Visual C# .NET

There is a problem in IE9 that the variables/functions are not accessible via IDispatch,但您仍然可以通过IDispatchEx以类似的方式访问变量/函数。

票数 2
EN

Stack Overflow用户

发布于 2011-07-30 01:23:55

我不认为您将能够从您的JS获得变量的值,因为您的C#将在您的js变量存在之前运行。我自己在获取js变量的值时也遇到了同样的问题,但我无法直接做到这一点。您可以做的是使用HtmlTextWriter方法来获取这些值。这将允许您使用C#呈现的js调用,该调用将允许您访问变量值。

例如:

代码语言:javascript
复制
 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();

它不是100%可以工作,但我知道你可以用这种方式访问你的js变量。我已经在其他项目中做到了这一点。希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6876555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档