积极答复者
Webbrowser控件的单击事件如何获取?

问题
-
webbrowser有单击时间,根据冒泡的原理,也应该可以在他的包含控件中获取。但是两者都不行。
我需要一个可以和js互相交互的网页控件?InvokeScript可不可以获取js function的返回值,如果可以,如何获取?
如何处理?
答案
-
根据冒泡的原理,也应该可以在他的包含控件中获取
你指的是什么意思?难道你指的是在WPF程序中嵌入一个WebBrowser控件,然后监听WebBrowser里面网页的DOM事件?如果你要到达这个目的的话,我不认为WebBrowser控件提供了这种支持,不过你可以通过在自己的程序里面创建IE的internetexplorer.application COM组件--WebBrowser实际上是对这个ActiveX组件的封装,然后获取里面的IWebBrowserX(例如IWebBrowser2)接口,通过这个接口,你应该可以监听DOM事件。
InvokeScript可不可以获取js function的返回值,如果可以,如何获取?如何处理?
应该是可以的,根据MSDN给出的示例代码,你直接将InvokeScript的返回值转换成对应的类型就可以了,例如下面的代码:
HTML:
<HTML>
<HEAD>
<TITLE>Invoke Script Sample</TITLE>
<SCRIPT>
function MyObject() {
this.Data = "Data for my private object.";
}
// Return a string.
function test() {
return("This is a test.");
}
// Return a JScript object.
function testJScriptObject() {
return(new(MyObject));
}
// Return a DOM element.
function testElement() {
return(div1);
}
</SCRIPT>
</HEAD>
<BODY>
<DIV id="div1">
</DIV>
</BODY>
</HTML>C#:
private void InvokeScript()
{
if (webBrowser1.Document != null)
{
HtmlDocument doc = webBrowser1.Document;
String str = doc.InvokeScript("test").ToString() ;
Object jscriptObj = doc.InvokeScript("testJScriptObject");
Object domOb = doc.InvokeScript("testElement");
}
}当然啦,如果你的JavaScript返回的是一个HTML控件的引用,我建议你还是采用自己封装InternetExplorer.Application这个ActiveX组件来做吧,所有的HTML控件都有对应的COM接口来操作。
全部回复
-
根据冒泡的原理,也应该可以在他的包含控件中获取
你指的是什么意思?难道你指的是在WPF程序中嵌入一个WebBrowser控件,然后监听WebBrowser里面网页的DOM事件?如果你要到达这个目的的话,我不认为WebBrowser控件提供了这种支持,不过你可以通过在自己的程序里面创建IE的internetexplorer.application COM组件--WebBrowser实际上是对这个ActiveX组件的封装,然后获取里面的IWebBrowserX(例如IWebBrowser2)接口,通过这个接口,你应该可以监听DOM事件。
InvokeScript可不可以获取js function的返回值,如果可以,如何获取?如何处理?
应该是可以的,根据MSDN给出的示例代码,你直接将InvokeScript的返回值转换成对应的类型就可以了,例如下面的代码:
HTML:
<HTML>
<HEAD>
<TITLE>Invoke Script Sample</TITLE>
<SCRIPT>
function MyObject() {
this.Data = "Data for my private object.";
}
// Return a string.
function test() {
return("This is a test.");
}
// Return a JScript object.
function testJScriptObject() {
return(new(MyObject));
}
// Return a DOM element.
function testElement() {
return(div1);
}
</SCRIPT>
</HEAD>
<BODY>
<DIV id="div1">
</DIV>
</BODY>
</HTML>C#:
private void InvokeScript()
{
if (webBrowser1.Document != null)
{
HtmlDocument doc = webBrowser1.Document;
String str = doc.InvokeScript("test").ToString() ;
Object jscriptObj = doc.InvokeScript("testJScriptObject");
Object domOb = doc.InvokeScript("testElement");
}
}当然啦,如果你的JavaScript返回的是一个HTML控件的引用,我建议你还是采用自己封装InternetExplorer.Application这个ActiveX组件来做吧,所有的HTML控件都有对应的COM接口来操作。
-
我已经在你的另外一个帖子里回答了这个问题
http://forums.microsoft.com/china/ShowPost.aspx?PostID=4234644&SiteID=15