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,我正在尝试将浏览器功能连接到三个按钮以下:
- 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();
}
发表评论的@Tom 给了我一个很好的检查线索。
这不是 GeckoFx 的问题——我最初通过将浏览器初始化和设置代码移动到我的 Form1() 构造函数来解决这个问题。这行得通,我已经摸索了几个小时 'why' 它行得通。事实证明,我不小心双重绑定了我的 Form_Load 方法,因此在运行时创建了两个 "browser" 实例。
解决方案是删除 Form_Load 的事件绑定之一。
我正在通过 Nuget (https://www.nuget.org/packages/Geckofx45/) 使用 Winforms、C# 和 geckofx-45 Windows 32 位 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();
}
发表评论的@Tom 给了我一个很好的检查线索。
这不是 GeckoFx 的问题——我最初通过将浏览器初始化和设置代码移动到我的 Form1() 构造函数来解决这个问题。这行得通,我已经摸索了几个小时 'why' 它行得通。事实证明,我不小心双重绑定了我的 Form_Load 方法,因此在运行时创建了两个 "browser" 实例。
解决方案是删除 Form_Load 的事件绑定之一。