c# - 尝试在 C# 的 ActiveX WebBrowser 中设置/获取 JavaScript 变量

标签 c# javascript activex browser

我们有一个包含 ActiveX WebBrowser 控件的 Windows 应用程序。作为此应用程序常规操作的一部分,将对 ActiveX WebBrowser 控件显示的页面进行修改。这些修改的一部分涉及在加载到 ActiveX WebBrowser 的网页中设置 JavaScript 变量。

我们需要在 C# 中初始化此变量(最初,VB6 代码正在初始化该值)。这个变量的值是一个 COM 可见的类对象。

但是,为简单起见,我们已将问题简化为设置字符串值。我们原来的页面涉及到框架之类的,但是在这样的页面中出现了同样的问题:

<HTML>
 <HEAD>
  <TITLE>Test</TITLE>
  <SCRIPT type="text/javascript">
   var field = 'hello world';
  </SCRIPT>
 </HEAD>
 <BODY>
   <input type="button" value="See field" onclick="javascript:alert(field);"/>
 </BODY>
</HTML>

我们想要访问 field 变量并为其赋值。在 VB6 中,此代码非常简单:

doc.Script.field = 'newValue'

但是,在 C# 中,我们不得不求助于其他技巧,例如:

Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Script, null, "field",new object[] { "newValue"},null, null);

该页面的重点是测试我们的变量是否由 C# 正确分配。单击该按钮应产生 C# 注入(inject)的任何新值。因此,例如,单击页面中的按钮,我们会收到一条显示“newValue”的警报。

这第一次有效,但如果我们重新加载页面则无效。在后续调用中,我们无法设置变量 field 的值。

有没有人有做过这种操作的经验?

最佳答案

我认为您正在寻找的是 Javascript 中的 eval() 方法。您可以像这样从 C# 调用它:

webBrowser1.Document.InvokeScript("eval", new String[] {"1 + 2"});

此代码将评估 "1 + 2" 并返回 "3"。我想如果你要投入

InvokeScript("eval", new String[] {"varName = 3"})

如果该变量在文件中全局可见,您会将其分配给 3。

关于c# - 尝试在 C# 的 ActiveX WebBrowser 中设置/获取 JavaScript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/136195/

相关文章:

c# - Xamarin.Forms 应用程序中的条目控件在 StackLayout 中不是完整长度

c# - 如何在azure上上传图像列表并检索已上传图像的地址

javascript - FB.api 发布到墙 : access token?

javascript - 如何使用jQuery根据哈希值触发不同的哈希变化函数?

javascript - 如何在更改文档时将一个集合复制到另一台服务器

c++ - 如何实际自定义 IE 上下文菜单?

.net - 在 TLBIMP-ed dll 之后手动生成 ActiveX 包装器?

c# - 从控制台或 Windows 服务以编程方式创建 Windows session

c# - 为什么不直接从代码中使用 Form.CenterToScreen?

c# - 如何使用单例进行继承