Я вижу несколько маршрутов: вместо geckowebbrowser.Enabled = false;
отключить все input
, select
, textarea
, button
и ссылки на DOM, например
GeckoElementCollection byTag = _browser.Document.GetElementsByTagName("input");
foreach (var ele in byTag)
{
var input = ele as GeckoInputElement;
input.Disabled = true;
}
и т. д.
удаляют события указателя из интерактивных элементов, например,
var byTag = _browser.Document.GetElementsByTagName("a");
foreach (var ele in byTag)
{
var a = ele as GeckoHtmlElement;
//a.SetAttribute("disabled", @"true");
a.SetAttribute("style", "pointer-events: none;cursor: default;");
}
Использовать невидимое наложение блокировщика CSS ( jsfiddle ), например, используя JavaScript
//UI block
window.onload = function() {
var blockUI = document.createElement("div");
blockUI.setAttribute("id", "blocker");
blockUI.innerHTML = '<div></div>'
document.body.appendChild(blockUI);
//unblock it
//var cover = document.getElementById("blocker").style.display = "none";
}
#blocker
{
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0.0;
background-color: #111;
z-index: 9000;
overflow: auto;
}
<button id="bloc">Blocked UI</button>
В коде моего приложения WPF demo я добавляю наложение после завершения загрузки страницы в DocumentCompletedсобытие:
using Gecko;
using Gecko.DOM;
using System.Windows;
using System.Windows.Forms.Integration;
using System.Linq;
namespace GeckoWpf {
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
Gecko.Xpcom.Initialize("Firefox");
}
void browser_DocumentCompleted(object sender, System.EventArgs e) {
//unsubscribe
_browser.DocumentCompleted -= browser_DocumentCompleted;
GeckoElement rt = _browser.Document.CreateElement("div");
rt.SetAttribute("id", "blocker");
rt.SetAttribute
(
"style",
"position: fixed;"
+ "top: 0px;"
+ "left: 0px;"
+ "width: 100%;"
+ "height: 100%;"
+ "opacity: 0.0;"
+ "background-color: #111;"
+ "z-index: 9000;"
+ "overflow: auto;"
);
_browser.Document.Body.AppendChild(rt);
}
WindowsFormsHost _host = new WindowsFormsHost();
GeckoWebBrowser _browser = new GeckoWebBrowser();
private void Window_Loaded(object sender, RoutedEventArgs e) {
_browser.DocumentCompleted += browser_DocumentCompleted;
_host.Child = _browser;
GridWeb.Children.Add(_host);
_browser.Navigate("https://www.google.com/");
}
}
}
Переопределите событие
OnClick
в главном окне приложения или в событиях Gecko Dom и установите для этого события значение
e.Handled = true;
Конечно, есть и другие варианты.