Est*_*nes 1 javascript c# browser activex
我们有一个包含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>
Run Code Online (Sandbox Code Playgroud)
我们想要访问字段变量并为其赋值.在VB6中,代码非常简单:
doc.Script.field = 'newValue'
Run Code Online (Sandbox Code Playgroud)
但是,在C#中我们不得不求助于其他技巧,如下所示:
Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateSet(Script, null, "field",new object[] { "newValue"},null, null);
Run Code Online (Sandbox Code Playgroud)
页面的要点是测试我们的变量是否由C#正确分配.单击该按钮应该产生C#注入的任何新值.因此,例如,单击页面中的按钮,我们会收到一条警告:"newValue".
这是第一次工作,但如果我们重新加载页面它不起作用.在后续调用中,我们无法设置变量的值field.
以前有没有人有过做这种操作的经验?
小智 7
我认为你要找的是eval()Javascript中的方法.您可以像这样从C#调用它:
webBrowser1.Document.InvokeScript("eval", new String[] {"1 + 2"});
Run Code Online (Sandbox Code Playgroud)
此代码将评估"1 + 2"并返回"3".我想如果你要投入
InvokeScript("eval", new String[] {"varName = 3"})
Run Code Online (Sandbox Code Playgroud)
如果在文件中全局可见,则将该变量分配给3.
| 归档时间: |
|
| 查看次数: |
8884 次 |
| 最近记录: |