Я использую библиотеку CefSharp.Когда я впервые открываю WebBrowser, я могу перехватить любое событие javascript на стороне браузера, но когда я перехожу на другой адрес, я не могу снова добавить событие boundEvent, и я получаю ошибку javascript на стороне консоли: Невозможно прочитать свойство 'riseEvent'of undefined.
Код C #:
public void InitCefBrowser(string url)
{
CefSharpSettings.FocusedNodeChangedEnabled = true;
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
CefBrowser = new ChromiumWebBrowser(url)
{
BrowserSettings =
{
DefaultEncoding = "UTF-8"
},
JsDialogHandler = new JsDialogHandler(),
Dock = DockStyle.Fill,
};
Panel1.Controls.Add(CefBrowser );
CefBrowser.FrameLoadEnd += Browser_FrameLoadEnd;
eventObject = new ScriptedMethodsBoundObject();
eventObject.EventArrived += OnJavascriptEventArrived;
CefBrowser.RegisterJsObject("boundEvent", eventObject, options: BindingOptions.DefaultBinder);
}
private void OnJavascriptEventArrived(string eventName, object eventData)
{
var jsonString = eventData.ToString();
var serializer = new JavaScriptSerializer();
var dataDict = serializer.Deserialize<Dictionary<string, object>>(jsonString);
switch (eventName)
{
case "click":
{
Invoke(new MethodInvoker(() =>
{
if (dataDict["Path"] != null)
TextBox1.Text = dataDict["Path"].ToString();
}));
break;
}
}
}
private void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
{
string scripts = File.ReadAllText(Application.StartupPath + @"\javascript\events.js", Encoding.UTF8);
CefBrowser.ExecuteScriptAsync(scripts);
try
{
CefBrowser.ShowDevTools();
}
catch (Exception ex) { }
}
private void BtnGoToPage_Click(object sender, EventArgs e)
{
CefBrowser.Load(TxtUrl.Text);
}
Код результата Javascript:
window.boundEvent.raiseEvent("click", "Test");
Этот код работает на одном домене.Я хочу, чтобы он работал в каждом домене.