天天看點

GeckoFx (2)向已加載的頁面中注入 css 和 js

向已加載的頁面中注入js、css,在頁面加載完後執行自定義的腳本,點選頁面元素展示修改元素的邊框顔色。

使用 browser_Load 事件在頁面加載完成時注入腳本。

使用 DomClick 事件,修改觸發元素的樣式。

初始化元件:
public void InitFrm()
{
  this.WindowState = FormWindowState.Maximized;
  Xpcom.Initialize(xulrunnerPath);
  browser = new Gecko.GeckoWebBrowser();            
  browser.Parent = this;
  browser.Dock = DockStyle.Fill;
  browser.Navi
  panelBottom.Height = 300;

  browser.Load += browser_Load;
  browser.DomClick += browser_DomClick;
}
private bool _load = false;
/// <summary>
/// 加載文檔
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void browser_Load(object sender, DomEventArgs e)
{
  if (!_load)
  {
    InjectCss(browser.Document);
    InjectJs(browser.Document);
  }
  if (!_load) _load = true;
}

/// <summary>
/// 注入樣式
/// </summary>
public void InjectCss(GeckoDomDocument doc)
{
  var css = doc.CreateHtmlElement("style");
  css.InnerHtml = @"
.firefinder-match-red {outline: 2px dashed #f00 !important;}
.firefinder-match-blue {outline: 2px dashed #00f !important;}";
  browser.Document.Head.AppendChild(css);
}
/// <summary>
/// 注入腳本
/// </summary>
public void InjectJs(GeckoDomDocument doc)
{
  var js = doc.CreateHtmlElement("script");
  js.InnerHtml = "alert(1);";
  browser.Document.Head.AppendChild(js);
}
/// <summary>
/// 文檔單擊事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void browser_DomClick(object sender, DomMouseEventArgs e)
{
  var ele = e.CurrentTarget.CastToGeckoElement();
  ele = e.Target.CastToGeckoElement();
  AddClass("firefinder-match-red", ele);
}
/// <summary>
/// 添加樣式
/// </summary>
public void AddClass(string className,params GeckoElement[] element)
{
  if (element != null && element.Length > 0)
  {
    element.All(x =>
    {
      if (x == null)
        return true;
      var cls = x.GetAttribute("class");
      cls += " " + className;
      x.SetAttribute("class", cls);
      return true;
    });
  }
}
/// <summary>
/// 移除樣式
/// </summary>
public void RemoveClass(string className, params GeckoElement[] element)
{
  if (element != null && element.Length>0)
  {
    element.All(x =>
    {
      if (x == null)
        return true;
      var cls = x.GetAttribute("class");
      if (!string.IsNullOrWhiteSpace(cls))
      {
        cls = cls.Replace(className, "").Trim();
        x.SetAttribute("class", cls);
      }
      return true;
    });
  }
}