Использование CefBrowser.Синхронизация исполняемых скриптов с BindObjectAsync не работает

#cefsharp

#cefsharp

Вопрос:

Я использую приведенный ниже код, чтобы попытаться связать класс c #, который был зарегистрирован, но не вижу «dwgData» нигде в области видимости при отладке веб-страницы. К чему будут привязаны dwgData?

     private void ChromiumBrowserForm_Load(object sender, EventArgs e)
    {
        CefSettings settings = new CefSettings();
        ChromiumWebBrowser browser = new ChromiumWebBrowser("http://localhost:3000");
        this.Controls.Add(browser);
        browser.Dock = DockStyle.Fill;

        browser.JavascriptObjectRepository.Register("dwgData", new DwgData(), true, null);

        browser.IsBrowserInitializedChanged  = Browser_IsBrowserInitializedChanged;
        browser.LoadingStateChanged  = Browser_LoadingStateChanged;
    }

    private async void Browser_LoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
    {
        ChromiumWebBrowser browser = (ChromiumWebBrowser)sender;
        if (e.IsLoading == false)
        {
            await Task.Run(() => browser.ExecuteScriptAsync("CefSharp.BindObjectAsync("dwgData");"));
        }
    }

    private void Browser_IsBrowserInitializedChanged(object sender, EventArgs e)
    {
        ChromiumWebBrowser browser = (ChromiumWebBrowser)sender;
        if (browser.IsBrowserInitialized)
        {
            browser.ShowDevTools();
        }
    }

public class DwgData
{
    public void showMessage()
    {
        MessageBox.Show("HELLO FROM JS");
    }
}
 

Комментарии:

1. Объект создается в глобальной области видимости, поэтому у вас должны быть window.dwgData

2. Спасибо, это то, чего мне не хватало