htmlを生成してShDocVw.InternetExplorerに読み込ませ、イベントを発火させる

iframeなどを含むhtmlを作り、ローカルに保存。
それをSHDocVw.InternetExploreに読み込ませた際にキャッシュが効くなどして
DocumentComplete, NavigateComplete2などのイベントが発火しないときがある。

こういった場合には、いったんNavigateメソッドでabout:blankを開かせ、
さらに生成したhtmlをファイルに保存することなくbody.innerHTMLに代入することで、
イベントを強制的に発火させることが可能。

        /// <summary>
        /// DocumentComplete
        /// </summary>
        /// <param name="pdisp"></param>
        /// <param name="e"></param>
        public void DocumentComplete(object pdisp, ref object e)
        {
            IWebBrowser2 iwb = (IWebBrowser2)pdisp;

            mshtml.IHTMLDocument2 hi = (mshtml.IHTMLDocument2) iwb.Document;
            string html = hi.body.innerHTML;
        }

        /// <summary>
        /// フォームロード時処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            ie = new SHDocVw.InternetExplorer();
            ie.WebWorkerStarted += new DWebBrowserEvents2_WebWorkerStartedEventHandler(ie_WebWorkerStarted);
            ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(this.DocumentComplete);
            ie.NavigateComplete2 += new DWebBrowserEvents2_NavigateComplete2EventHandler(this.DocumentComplete);
            ie.DownloadComplete += new DWebBrowserEvents2_DownloadCompleteEventHandler(ie_DownloadComplete);
            //ie.BeforeNavigate2 += this.DocumentBefore();
            ie.FileDownload += new DWebBrowserEvents2_FileDownloadEventHandler(ie_FileDownload);
            ie.DownloadBegin += new DWebBrowserEvents2_DownloadBeginEventHandler(ie_DownloadBegin);
            ie.BeforeNavigate2 += new DWebBrowserEvents2_BeforeNavigate2EventHandler(ie_BeforeNavigate2);
            ie.BeforeScriptExecute += new DWebBrowserEvents2_BeforeScriptExecuteEventHandler(ie_BeforeScriptExecute);
            
            ie.Visible = true;
            ie.Navigate("about:blank");
        }

        /// <summary>
        /// 実際に生成したHTMLを代入。このボタン処理後、DocumentCompleteイベントが発火する
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            ((mshtml.IHTMLDocument2)ie.Document).body.innerHTML = @"<iframe src=""
https://www.amazon.jp/reviews/iframe?akid=**************&amp;alinkCode=xm2&amp;asin=B00V7Q9IX6&amp;atag=bonkagu0a-22&amp;exp=2017-03-16T00%3A03%3A30Z&amp;v=2&amp;sig=7n6X8poGaYB9%2FVkjuCZlskw991lJMzrdqhkq%2B4v74mk%3D
"" width=""1000"" height=""1000"">〜</iframe>";

        }