GeckoFx 45 Navigate / GoBack / Reload方法不起作用

时间:2016-04-26 23:13:10

标签: c# winforms geckofx

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

  • browser.Navigate( “www.bing.com”);
  • browser.GoBack();
  • browser.Reload();

我在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();
    }

1 个答案:

答案 0 :(得分:2)

评论的@Tom给了我一个很好的结论。

这不是GeckoFx的问题 - 我最初通过将浏览器初始化和设置代码移动到我的Form1()构造函数来解决这个问题。这很有效,我已经摸不着头几个小时了解为什么&#39;有效。事实证明,我不小心双重绑定了我的Form_Load方法,因此有两个&#34;浏览器&#34;正在运行期间创建。

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