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 是不是同步的主要内容,如果未能解决你的问题,请参考以下文章

window.external 有啥用?

window.external的使用

window.external的使用

C# WebBrowser 控件:window.external 访问子对象

修改window.external使JS可调用Delphi方法

使用 typeof 检查时调用 window.external 上的无参数方法