我刚刚发现了window.external
允许在托管类似 IE 浏览器的 winform 程序中调用 C# 函数的对象。
我把 MSDN 上的文档和 stackOverflow 上的一些线程都加红了,但我没有发现这些调用是否是同步的,而且,它是可定制的吗?
我在 MSDN 文档中创建的唯一内容没有谈到这个主题 =/
我刚刚发现了window.external
允许在托管类似 IE 浏览器的 winform 程序中调用 C# 函数的对象。
我把 MSDN 上的文档和 stackOverflow 上的一些线程都加红了,但我没有发现这些调用是否是同步的,而且,它是可定制的吗?
我在 MSDN 文档中创建的唯一内容没有谈到这个主题 =/
这些调用自然是同步的,但通常异步处理它们是有意义的,以避免在其他情况下可能重新进入 JavaScript 代码。您可以为此使用SynchronizationContext.Post。
例如,您window.external.TestMethod()
从 JavaScript 调用。在 .NET 方面,它可能如下所示:
this.webBrowser.ObjectForScripting = new ObjectForScripting(this.webBrowser);
// ...
[ComVisible(true), ClassInterface(ClassInterfaceType.None)]
public class ObjectForScripting
{
WebBrowser _browser;
SynchronizationContext _context = SynchronizationContext.Current;
public ObjectForScripting(WebBrowser browser)
{
_browser = browser;
}
public void TestMethod()
{
_context.Post(_ =>
{
_browser.Document.InvokeScript("alert", new object[] {
"Process a call from JavaScript asynchronosuly." });
}, null);
}
}