2015-03-03 25 views
0

我正在使用CEFSharp並註冊一些C++/CLI原生函數,其中一個函數非常耗時,因此在html頁面中有一個忙圖標。我希望這個繁忙的圖標顯示在這個耗時的本地函數被調用,但是,圖標得到,因爲DOM卡沒有得到刷新時的本地函數被調用:使用CEFSharp原生函數不會刷新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代碼:

function activateExistingUser() { 
    ... 

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

    } 

有沒有什麼解決方案,使DOM得到刷新,顯示忙圖標?謝謝

回答

2

正如你發現綁定方法以同步方式執行。我推薦的方法是產生一個'任務',立即返回,並呼籲ExecuteScriptAsync有效Callback到您的網頁。

有工作正在進行添加異步回調,應該包括在版本39https://github.com/cefsharp/CefSharp/pull/868有信息,如果您感興趣。

+0

CefSharp'39.0.0'已經發布,包括提供函數回調的能力。示例項目提供了一個完整的演示 https://github.com/cefsharp/CefSharp/blob/master/CefSharp.Example/BoundObject.cs#L23 https://github.com/cefsharp/CefSharp/blob/master /CefSharp.Example/Resources/BindingTest.html#L19 – amaitland 2015-04-16 09:47:48