使用CEFSharp本机函数不会刷新DOM

时间:2015-03-03 03:28:52

标签: javascript c++-cli cefsharp

我正在使用CEFSharp,并注册一些C ++ / CLI本机函数,其中一个函数很耗时,因此html页面中有一个忙图标。我希望在调用这个耗时的本机函数时显示这个繁忙的图标,但是,由于在调用本机函数时DOM没有刷新,因此图标卡住了:

原生功能:

public ref class ActivationForm : Form
    {
    public:
        ActivationForm(void)
        {
        }

        ActivationForm(MainAppForm^ iHost, String^ iTitle)
        {
            InitializeComponent();

            this->webBrowser->RegisterJsObject("FormWrapper", gcnew ActivationForm::FormWrapper(this->webBrowser, this));
        }

    private:

        CefSharp::WinForms::WebView^ webBrowser;
        ref class FormWrapper
        {
            CefSharp::WinForms::WebView^  webBrowser;
            ActivationForm^ mActivationForm;

        public:
            FormWrapper(CefSharp::WinForms::WebView^ iWebBrowser, ActivationForm^ iActivationForm)
            {
                webBrowser = iWebBrowser;
                mActivationForm = iActivationForm;
            }


            int activateMail(String^ iMail, String^ callback);
        };

int ActivationForm::FormWrapper::activateMail(String^ iMail, String^ callback)
    {
        //connect to activation server
    }

js code:

function activateExistingUser() {
    ...

        if (!window.FormWrapper.activateMail(emailAddress)) {
            isWaitingForTask = false;
            me.displayFullInfoWindow();
        }

    } 

是否有任何解决方案可以让DOM刷新并显示忙碌图标?感谢

1 个答案:

答案 0 :(得分:2)

正如您所发现的,绑定方法以同步方式执行。我建议的方法是生成“任务”,立即返回并致电ExecuteScriptAsync以有效Callback进入您的网页。

正在进行添加异步回调的工作,应该包含在版本39中,如果您感兴趣,https://github.com/cefsharp/CefSharp/pull/868会提供信息。