如何在.NET中运行IE控件里HTML页面的脚本函数?

triout 2004-10-15 02:16:05
一个FORM,用到IE的WEBBROWSER控件,需要在程序中根据需要动态的运行网页中的SCRIPT脚本函数,该如何解决?

通过控件成功获得了文档对象,也成功的获得了HTML中SCRIPT标记元素对象,但就没有办法获得SCRIPT中的具体函数并运行。
...全文
346 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gucs 2004-10-18
  • 打赏
  • 举报
回复
我是在saucer的blog中看到这个链接的,收藏一下
saucer 2004-10-16
  • 打赏
  • 举报
回复
also see

http://blog.joycode.com/saucer/archive/2004/10/16/35628.aspx
saucer 2004-10-16
  • 打赏
  • 举报
回复
if you have this in your page:

<script language="javascript">
var var1 = 'yes';
function testx(obj)
{
alert(obj);
alert(var1);
}
</script>
<input type=button value="click me" onclick="testx('hello');">

you can also try

mshtml.IHTMLDocument2 doc = (mshtml.IHTMLDocument2)axWebBrowser1.Document;
mshtml.IHTMLWindow2 win = (mshtml.IHTMLWindow2)doc.parentWindow;

win.GetType().InvokeMember("testx",BindingFlags.InvokeMethod,null,win,new object[]{1});
triout 2004-10-15
  • 打赏
  • 举报
回复
非常感谢死鬼大哥。

使用execScript还存在一个问题就是:如果函数不存在则会产生异常,而不象在VC中那样可以判断函数是否存在,不过通过异常捕获可以解决问题了。
benzite 2004-10-15
  • 打赏
  • 举报
回复
form1_Onload()
{
object o=null;
this.axWebBrowser1.Navigate("about:blank",ref o,ref o,ref o,ref o);
}

axWebBrowser1_DocumentComplete()
{
mshtml.IHTMLDocument2 doc=(mshtml.IHTMLDocument2)this.axWebBrowser1.doc;
doc.write("<script language=javascript>window.open(http://www.csdn.net)</script>");
}
saucer 2004-10-15
  • 打赏
  • 举报
回复
use the window's execScript method , see

http://codeproject.com/jscript/htmlgetshooked.asp
triout 2004-10-15
  • 打赏
  • 举报
回复
试了死鬼老大的,不行,这个方法只能获得类定义中的方法,而我要获得的是HTML脚本中的方法,修改为doc2来获得也一样。

这个问题挺急的。



回复人: heroqxn(Brook) ( ) 信誉:100 2004-10-15 14:38:00 得分: 0


http://blog.joycode.com/lostinet/category/836.aspx?Show=All
看看对你有用吗

这个URL访问了,也没有这方面的内容,而我要在HTML中执行.NET函数已经实现。

saucer 2004-10-15
  • 打赏
  • 举报
回复
try to use Reflection, something like

IHTMLDocument2 doc2 = (IHTMLDocument2)axWebBrowser1.Document;
IHTMLWindow2 iWindow2 = (IHTMLWindow2) doc2.parentWindow;

MethodInfo mi = iWindow2.GetType().GetMethod("functionName",BindingFlags.NonPublic | BindingFlags.Instance);

if (mi != null)
mi.Invoke(iWindow2, null);
....


elite2018 2004-10-15
  • 打赏
  • 举报
回复
先看看楼上的地址能否解决
heroqxn 2004-10-15
  • 打赏
  • 举报
回复
http://blog.joycode.com/lostinet/category/836.aspx?Show=All
看看对你有用吗
fengforever 2004-10-15
  • 打赏
  • 举报
回复
两颗星星
直接这样不行吗?
Page.RegisterStartupScript("js","<script language=JScript>GetAll()</script>");
3ss 2004-10-15
  • 打赏
  • 举报
回复
观注
swzlxm 2004-10-15
  • 打赏
  • 举报
回复
取得<SCRIPT></SCRIPT>之间的所有文本

你查找FUNCITON 的方式定位,如果后面紧跟的是你想要的函数,那么从这个字符开始一直取到下一个FUNCTION,
如果不是你想要的函数,则定位到一个个FUNCTION处;

用STRINGBUILDER类好一点


如果取到了里面的语句,执行不是问题了.

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧