GeckoFx 45 导航/返回/重新加载方法不起作用

GeckoFx 45 Navigate / GoBack / Reload Methods Not Working

我正在通过 Nuget (https://www.nuget.org/packages/Geckofx45/) 使用 Winforms、C# 和 geckofx-45 Windows 32 位 45.0.10,我正在尝试将浏览器功能连接到三个按钮以下:

我 运行 在 Visual Studio 2015 年,我的断点表明我的按钮没有问题。这些方法中的每一个都调用了代码,浏览器中没有反映任何更改。

澄清一下:我在 Form_Load 事件绑定方法中添加和创建了控件。在该方法中,browser.Navigate、browser.Reload 和 browser.GoBack 方法以编程方式工作。但是,我无法让这些方法在其他任何地方工作。

有什么想法吗?也许我只是做错了什么?

谢谢!

Form1_Load 方法代码

        private void Form1_Load(object sender, EventArgs e)
    {
        //Configure Browser
        browser = new GeckoWebBrowser();

        GeckoPreferences.User["places.history.enabled"] = false;
        GeckoPreferences.User["security.warn_viewing_mixed"] = false;
        GeckoPreferences.User["plugin.state.flash"] = 0;
        GeckoPreferences.User["browser.cache.disk.enable"] = false;
        GeckoPreferences.User["browser.cache.memory.enable"] = false;
        GeckoPreferences.User["browser.xul.error_pages.enabled"] = false;
        GeckoPreferences.User["dom.max_script_run_time"] = 0; //let js run as long as it needs to; prevents timeout errors
        GeckoPreferences.User["browser.download.manager.showAlertOnComplete"] = false;
        GeckoPreferences.User["privacy.popups.showBrowserMessage"] = false;
        browser.AllowDrop = false;

        this.Controls.Add(browser);
        browser.Dock = DockStyle.None;
        browser.Size = new System.Drawing.Size(1024, 700);
        browser.Margin = new System.Windows.Forms.Padding(0);
        browser.MinimumSize = new System.Drawing.Size(20, 20);
        int leftOffset = (this.ClientSize.Width - browser.Width) / 2;
        browser.Location = new System.Drawing.Point(leftOffset,2);

        //Hooking browser events
        browser.ShowContextMenu += new EventHandler<GeckoContextMenuEventArgs>(browser_ShowContextMenu); //Strip out undesirable options from the right click menu.
        browser.CreateWindow += new EventHandler<GeckoCreateWindowEventArgs>(browser_CreateWindow); //Prevent the browser from opening popup windows in new windows / links in new windows.
        browser.NSSError += new EventHandler<GeckoNSSErrorEventArgs>(browser_NSSError); //Bypass SSL certificate issues
        browser.NavigationError += new EventHandler<GeckoNavigationErrorEventArgs>(browser_NavigationError); //If there are any issues encountered during page loads
        browser.Navigated += new EventHandler<GeckoNavigatedEventArgs>(browser_Navigated); //React appropriately to URL navigation

        //Navigate the browser as desired.
        browser.Navigate(defaultHomeWebsite);
    }

已触发但浏览器方法不起作用的表单按钮

    /// <summary>
    /// Browser Button: Go Home
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button4_Click(object sender, EventArgs e)
    {
        browser.Navigate("www.bing.com");
    }

    /// <summary>
    /// Browser Button: Go Back
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button3_Click(object sender, EventArgs e)
    {
        browser.GoBack();
    }

    /// <summary>
    /// Browser Button: Refresh Page
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void button2_Click(object sender, EventArgs e)
    {
        browser.Reload();
    }

发表评论的@Tom 给了我一个很好的检查线索。

这不是 GeckoFx 的问题——我最初通过将浏览器初始化和设置代码移动到我的 Form1() 构造函数来解决这个问题。这行得通,我已经摸索了几个小时 'why' 它行得通。事实证明,我不小心双重绑定了我的 Form_Load 方法,因此在运行时创建了两个 "browser" 实例。

解决方案是删除 Form_Load 的事件绑定之一。