C# WebBrowser 控件:window.external 访问子对象
Posted
技术标签:
【中文标题】C# WebBrowser 控件:window.external 访问子对象【英文标题】:C# WebBrowser control: window.external access sub object 【发布时间】:2014-06-19 09:39:25 【问题描述】:将对象分配给 WebBrowser 控件的ObjectForScripting
属性时,javascript 可以使用windows.external.[method_name]
调用该对象的方法。这没有问题。
但是当我有这样的 JavaScript 函数(访问子对象)时,我需要如何设计这个 C# 对象:window.external.app.testfunction();
我使用分配给 ObjectForScripting
属性的以下 C# 对象对其进行了测试:
[ComVisible(true)]
public class TestObject
public App app = new App();
public class App
public void testfunction()
但不幸的是,这不起作用,并导致 JavaScript 错误提示“预期功能”。
您知道 C# 对象的外观如何让这个 JavaScript 命令正常工作吗?
感谢您对此的任何提示
安德烈亚斯
【问题讨论】:
【参考方案1】:我建议您使用基于InterfaceIsIDispatch
的接口将对象模型从C# 公开到JavaScript:
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace WindowsFormsApplication
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IApp
void testFunction();
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ITestObject
IApp App get;
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ITestObject))]
public class TestObject: ITestObject
readonly App _app = new App();
public IApp App
get return _app;
[ComVisible(true)]
public class App : IApp
public void testFunction()
MessageBox.Show("Hello!");
public partial class Form1 : Form
public Form1()
InitializeComponent();
this.webBrowser1.ObjectForScripting = new TestObject();
this.webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
this.webBrowser1.Navigate("about:blank");
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
this.webBrowser1.Navigate("javascript:external.App.testFunction()");
【讨论】:
您好 Noseratio,这很好用 - 感谢您抽出宝贵时间回复!安德烈亚斯。以上是关于C# WebBrowser 控件:window.external 访问子对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# 中更新 WebBrowser 控件中的 DOM 内容?
在 C# Webbrowser 控件 WPF 中从 Javascript 获取返回值