- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 WinForm,它通过 ObjectForScripting 与 WebBrowserControl 交互。我的 WinForm 的基类不是 ComVisible,我不能也不会更改它。因为有一个 NonComVisibleBaseClass,所以我创建了一个接口(interface)并将其设置为 ComVisible(true) 并设置了 FormAttribute [ClassInterface(ClassInterfaceType.None)]。接口(interface)中的方法可以被 JavaScript 调用。它完美地工作:
//Make the class visible for COM so we can set the ObjectForScripting
//Specify ClassInterfaceType.None to use the ComVisible Interface
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public partial class GeekBrowser : GeekBasePage, IMapControlInteractable
...
public class GeekBasePage : System.Windows.Forms.Form
...
[ComVisible(true)]
public interface IMapControlInteractable
但现在我的问题。该接口(interface)包含多个功能。我想为单独的任务分组分离接口(interface)。所以我想要一个包含日志功能的接口(interface)和一个用于数据访问功能的接口(interface)等等。
所以它会是这样的:
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public partial class GeekBrowser : GeekBasePage, IDataAccess, ILogging
...
public class GeekBasePage : System.Windows.Forms.Form
...
[ComVisible(true)]
public interface IDataAccess
...
[ComVisible(true)]
public interface ILogging
但是当我这样做时,无法从 Javascript 访问第二个接口(interface) (ILogging) 的功能。如果我切换接口(interface)的顺序,则无法访问 IDataAccess 函数。
因此,在 Javascript 中似乎只能访问第一个接口(interface)中的方法。
如何使每个界面的每个功能都可访问?再次声明,使 BaseClass ComVisible 并删除 ClassInterface 属性将起作用,但不是一个选项。
提前致谢!
最佳答案
在做一个类似的项目时,我们发现 JavaScript 只能访问生成 COM 包装器的默认接口(interface),在您的情况下,它会选择它找到的第一个 ComVisible 接口(interface)作为默认接口(interface),因为您没有明确设置默认接口(interface)属性。问题是 JavaScript 没有类似的 QueryInterface。
要访问其他接口(interface),我们需要为 JavaScript 创建我们自己的 QueryInterface 版本,方法是在默认接口(interface)中提供显式转换类型函数(不太优雅),或者有一个单独的对象可以执行转换到正确的 ComVisible 接口(interface)类型。
希望对您有所帮助!
关于c# - 具有多个接口(interface)的 ObjectForScripting 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5090523/
在 .NET WebBrowser 控件中,有一个名为“ObjectForScripting”的属性。当您在 Javascripts 中调用 window.external 时,它会调用 .Net 代
我已按照本教程将 WebKitBrowser 对象添加到我的 Visual Studio C# 2010 工具箱中: http://webkitdotnet.sourceforge.net/basic
据我所知,我们可以从 Javascript 调用 C# 函数,它在 WebBrowser 控件中加载,下面的代码显示了我通常是如何做的。 Form1.cs public partial class F
我有一个 WinForm,它通过 ObjectForScripting 与 WebBrowserControl 交互。我的 WinForm 的基类不是 ComVisible,我不能也不会更改它。因为有
我知道为 WebBrowser 控件提供的 ObjectForScripting 属性,它是为 WinForms 应用程序提供的。我在智能设备应用程序中使用 WebBrowser 控件。我找不到此属性
在调用绑定(bind)到 WPF Web 浏览器控件的 ObjectForScripting 上的方法时,网页 UI 锁定出现奇怪的问题。进一步的调查使我们意识到整个 UI(包括 WPF 应用程序而不
有没有办法确定 WPF WebBrowser 控件的 ObjectForScripting 属性是否已通过在所述控件中运行的 javascript 设置?或者,有没有办法确定 ObjectForScr
我正在尝试从 WPF 浏览器控件网页捕获点击事件。我创建了一个 ObjectForScriptingHelper 类: [PermissionSet(SecurityAction.Demand, Na
提前致谢。 在我的应用程序中,我将 WebBrowser 控件替换为 Microsoft 的 WebView2 . 我想知道 WebView2 中 WebBrowser 控件的以下成员的等价物。 We
我正在尝试使用 WPF WebBrowser 控件在 C# 和 JavaScript 之间建立互操作。到目前为止,C#->JavaScript 调用运行良好,但我无法运行 JavaScript->C#
我是一名优秀的程序员,十分优秀!