我们有一个包含 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>
我们想要访问字段变量并为其赋值。在 VB6 中,这方面的代码非常简单:
doc.Script.field = 'newValue'
但是,在 C# 中,我们不得不求助于其他技巧,例如:
Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Script, null, "field",new object[] { "newValue"},null, null);
该页面的重点是测试我们的变量是否由 C# 正确分配。单击该按钮应该会产生 C# 注入的任何新值。例如,单击页面中的按钮,我们会收到一条警报,显示:“newValue”。
这第一次有效,但如果我们重新加载页面,它就不起作用了。在随后的调用中,我们无法设置变量的值field
。
以前有没有人做过这种手术的经验?