Как работает JavaScript-коды на каждом домене в CefSharp - PullRequest
0 голосов
/ 08 апреля 2019

Я использую библиотеку 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");

Этот код работает на одном домене.Я хочу, чтобы он работал в каждом домене.

...