window.external 是不是同步
Posted
技术标签:
【中文标题】window.external 是不是同步【英文标题】:is window.external synchronous or notwindow.external 是否同步 【发布时间】:2013-09-06 21:38:33 【问题描述】:我刚刚发现了window.external
对象,它允许在托管类 IE 浏览器的 winform 程序中调用 C# 函数。
我在 MSDN 上修改了文档,在 *** 上修改了一些线程,但我没有发现这些调用是否是同步的,是否可以自定义?
我在 MSDN 文档中创建的唯一内容没有谈到这个主题 =/
【问题讨论】:
为什么需要知道? 我做了一些测试。调用似乎是异步的。我想确定。 【参考方案1】:这些调用自然是同步的,但通常异步处理它们是有意义的,以避免在其他情况下可能重新进入 javascript 代码。你可以使用SynchronizationContext.Post。
例如你从 JavaScript 调用 window.external.TestMethod()
。在 .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);
【讨论】:
一种不同的方式,但具有相同的概念是传递一个异步调用的 JS 函数。不过,我还没有检查这是否可能。 实际上,这似乎是可能的,再次感谢@Noseratio:***.com/a/21150022/314056以上是关于window.external 是不是同步的主要内容,如果未能解决你的问题,请参考以下文章
C# WebBrowser 控件:window.external 访问子对象