2016-07-13 1 views
0

현재 CefSharp RegisterJsObject를 사용할 때 문제가 발생했습니다. 내 코드는 아래와 같습니다.CefSharp RegisterJsObject throw StackOverflowException

나는

<package id="cef.redist.x64" version="3.2704.1432" targetFramework="net45" /> 
<package id="cef.redist.x86" version="3.2704.1432" targetFramework="net45" /> 
<package id="CefSharp.Common" version="51.0.0-pre02" targetFramework="net45" /> 
<package id="CefSharp.WinForms" version="51.0.0-pre02" targetFramework="net45" /> 

Program.cs

namespace Project1 
{ 
    public static class Program 
    { 
     [STAThread] 
     private static void Main() 
     { 
      Initialize(); 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      var cefSettings = new CefSettings 
      { 
       UserAgent = 
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36" 
      }; 
      Cef.Initialize(cefSettings); 

      new FormSplash().Show(); 
      Application.Run(); 
     } 
    } 
} 

FormSplash.cs을 사용하고

내가 RegisterJsObject 라인 에없는 내부 예외 세부 An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll을 받고 계속
namespace Project1 
{ 
    public partial class FormSplash : Form 
    { 
     public ChromiumWebBrowser Browser { get; set; } 
     public JsObject JsObj { get; set; } 

     public FormSplash() 
     { 
      InitializeComponent(); 
      JsObj = new JsObject(this); 
     } 

     private void FormChromeToneExcelRegistration_Load(object sender, EventArgs e) 
     { 
      Browser = new ChromiumWebBrowser("https://google.com"); 
      Browser.RegisterJsObject("jsObj", new JsObject(this)); 
      Browser.FrameLoadStart += Browser_FrameLoadStart; 
      Browser.FrameLoadEnd += Browser_FrameLoadEnd; 
      Controls.Add(Browser); 
      Browser.Dock = DockStyle.Fill; 
     } 

     private void SetMessage(string message) 
     { 
      ... 
     } 

     public class JsObject 
     { 
      public FormSplash Form { get; set; } 

      public JsObject(FormSplash form) 
      { 
       Form = form; 
      } 

      public void SetMessage(string message) 
      { 
       Form.SetMessage(message); 
      } 
     } 
    } 
} 

.

시나리오 나 또한 시도했다 :

  • 변경 SetMessage() SetMessage() (작동하지)
  • 가 중첩 클래스를 이전 (작동하지)

나 ' 아래의 코드와 그 작업을 시도했습니다.

Browser.RegisterJsObject("jsObj", ""); 
Browser.RegisterJsObject("jsObj", new {}); 
Browser.RegisterJsObject("jsObj", new DateTime()); 

내 프로젝트에서 StackOverflowException을 던질 이유를 도와주십시오.

+1

으로 만들거나 양식 속성을 비공개로 설정하거나 속성에 'JavascriptIgnoreAttribute' 속성을 추가하십시오. – amaitland

+0

@ amitland에게 감사드립니다. 이제 일이야! –

답변

0

@ amitland에게 감사드립니다. 이에 대한 해결책은 을 JsObject으로 설정하거나 JavascriptIgnoreAttribute