如果页面中有iframe那么DocumentComplete事件会多次触发private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (string.Compare(e.Url.ToString(), url, true) != 0) return; // 判断一下是否为期望的url
//...
}
{
if (string.Compare(e.Url.ToString(), url, true) != 0) return; // 判断一下是否为期望的url
//...
}
http://social.msdn.microsoft.com/Forums/en/ieextensiondevelopment/thread/1212c336-95a6-4f2a-8829-197fb3edf7a8
我的主要目标是得到 parentWindow 然后可以执行 execScript 即可。
实在找不到比这更好的方法了。
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Reflection;
using System.Windows.Forms;
using mshtml;
using SHDocVw;namespace InternetWebbrowser
{
class OpenIE
{
public OpenIE()
{
this.get_IE_Window();
} [STAThread]
private void get_IE_Window()
{
InternetExplorer ie = new InternetExplorerClass();
object url = "http://www.sina.com.cn";
object nill = null;
ie.Visible = true;
ie.Navigate2(ref url, ref nill, ref nill, ref nill, ref nill);
ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.IE_DocumentComplete);
} [STAThread]
void IE_DocumentComplete(object pDisp, ref object URL)
{
Console.WriteLine(System.Threading.Thread.CurrentThread.GetApartmentState().ToString());
try
{
((IHTMLDocument2)((SHDocVw.IWebBrowserApp)pDisp).Document).parentWindow.execScript("alert('Hello World!')", "JavaScript");
}
catch (Exception exp)
{
Console.WriteLine(exp.Message + "\n\r" + exp.Source + "\n\r" + exp.StackTrace);
}
}
}
}