要覆盖这些 Javascript 函数,您需要确保它们进入正确的页面。
您可能会在页面加载中看到分阶段的事件。这意味着一旦页面被加载,脚本可能不会被加载但仍在加载。或者,绝对 URL 可能不是加载脚本的 URL。
先试试这个:
public void navigateURL(string URL)
{
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(page_Loaded);
webBrowser1.Navigate(URL);
}
void page_Loaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show(e.Url.AbsolutePath)
}
这将告诉您尝试将代码注入的 URL 是否正确。我在某些页面上看到,e.Url.AbsolutePath 可以在加载最终页面之间多次更改。在以下 URL 字符串中记录显示在 MessageBox 中的 URL。
private string URL1 = "<First URL to load>";
private string URL2 = "<Second URL to load>";
private string URL3 = "<Third URL to load>";
void page_Loaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser1.Url.ToString() == "URL3")
{
// Block POP Ups...
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement;
string alertBlocker = "window.alert = function () { }";
element.text = alertBlocker;
head.AppendChild(scriptEl);
this.webBrowser1.PerformLayout();
webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(Page_Loaded);
}
}
我已将 URL1 - 3 放在那里,以指示您需要使用的可能 URL。
在某些情况下,我还需要实现一个 Timer 来等待对象加载:
void page_Loaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// Wait for Objects to Load...
delaytimer.Interval = 500;
delaytimer.Enabled = true;
delaytimer.Tick += new EventHandler(PageObjects_Loaded);
delaytimer.Start();
}
void PageObjects_Loaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// Do your stuff Here...
}
还要检查所有其他简单的事情,确保页面有一个 head 标签,那里可能已经有代码注入,并且你的代码被注入到 head 标签中。
希望这可以帮助。
[编辑]
IHTMLScriptElement 位于 mshtml 库中,因此您需要参考:“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Common”或“C:\Program Files (x86)\ Microsoft Visual Studio 11.0\Visual Studio Tools for Office\PIA\Common"
并添加:使用 mshtml;
我看到你已经完成了,所以这是给其他人的。