CefSharp RegisterJsObject 抛出 StackOverflowException
CefSharp RegisterJsObject throw 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" />
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
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.WhosebugException' occurred in mscorlib.dll
,行 RegisterJsObject 中没有内部异常详细信息。
我也试过的场景:
- 将 SetMessage 更改为 setMessage(无效)
- 将嵌套的 class 移出(无效)
我已经尝试了下面的这些代码及其工作。
Browser.RegisterJsObject("jsObj", "");
Browser.RegisterJsObject("jsObj", new {});
Browser.RegisterJsObject("jsObj", new DateTime());
请问为什么我项目中的 class 会抛出 WhosebugException?
感谢@amaitland。解决方案是将 JsObject
中的 Form
设为私有或将其设为 JavascriptIgnoreAttribute
我目前在使用 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" />
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
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.WhosebugException' occurred in mscorlib.dll
,行 RegisterJsObject 中没有内部异常详细信息。
我也试过的场景:
- 将 SetMessage 更改为 setMessage(无效)
- 将嵌套的 class 移出(无效)
我已经尝试了下面的这些代码及其工作。
Browser.RegisterJsObject("jsObj", "");
Browser.RegisterJsObject("jsObj", new {});
Browser.RegisterJsObject("jsObj", new DateTime());
请问为什么我项目中的 class 会抛出 WhosebugException?
感谢@amaitland。解决方案是将 JsObject
中的 Form
设为私有或将其设为 JavascriptIgnoreAttribute