我们有一个包含 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/