我们有一个包含ActiveX WebBrowser控件的Windows应用程序.作为此应用程序的常规操作的一部分,将对ActiveX WebBrowser控件显示的页面进行修改.部分修改涉及在加载到ActiveX WebBrowser中的网页中设置JavaScript变量.
我们需要在C#中初始化这个变量(最初,VB6代码正在初始化值).此变量的值是COM可见的类对象.
但是,为简单起见,我们将问题缩小为设置字符串值.我们的原始页面涉及框架等,但在这样的页面中出现相同的问题:
Test
我们想要访问字段变量并为其赋值.在VB6中,代码非常简单:
doc.Script.field = 'newValue'
但是,在C#中我们不得不求助于其他技巧,如下所示:
Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Script, null, "field",new object[] { "newValue"},null, null);
页面的要点是测试我们的变量是否由C#正确分配.单击该按钮应该产生C#注入的任何新值.因此,例如,单击页面中的按钮,我们会收到一条警告:"newValue".
这是第一次工作,但如果我们重新加载页面它不起作用.在后续调用中,我们无法设置变量的值field
.
以前有没有人有过做这种操作的经验?
我认为你要找的是eval()
Javascript中的方法.您可以像这样从C#调用它:
webBrowser1.Document.InvokeScript("eval", new String[] {"1 + 2"});
此代码将评估"1 + 2"
并返回"3"
.我想如果你要投入
InvokeScript("eval", new String[] {"varName = 3"})
如果在文件中全局可见,则将该变量分配给3.