CefSharp RegisterJsObject бросает StackOverflowException

В настоящее время я столкнулся с проблемой при использовании CefSharp RegisterJsObject. Мой код, как показано ниже.

Я использую

<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" />

Программа.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

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);
            }
        }
    }
}

Я продолжаю получать An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll без сведений о внутреннем исключении в строке RegisterJsObject.

Сценарий, который я также пробовал:

  • Измените SetMessage на setMessage (не работает)
  • Перемещен вложенный класс (не работает)

Я пробовал этот код ниже и его работу.

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

Помогите, пожалуйста, почему класс в моем проекте выдает StackOverflowException?


person Kelvin Go    schedule 13.07.2016    source источник
comment
Сделайте свойство формы частным или добавьте к свойству атрибут JavascriptIgnoreAttribute.   -  person amaitland    schedule 13.07.2016
comment
спасибо @amaitland. это работа сейчас!   -  person Kelvin Go    schedule 17.07.2016


Ответы (1)


Спасибо @amaitland. Решением для этого было либо сделать Form в JsObject частным, либо сделать его JavascriptIgnoreAttribute.

person Kelvin Go    schedule 17.07.2016