よくある話ですが、今回もかなり調べまくって見つかった答えはあまりに簡単という結末。
CWebBrowser2& Browser; のとき、 Browser.put_Silent(true);
こんだけ。
ActiveX コンポーネントの WebBrowser オブジェクトを MFC でラップした CWebBrowser2(デフォルトの名前だけど)を使っているとインターネットオプションで、スクリプトエラーを通知しない設定にしても、スクリプトエラーのダイアログが出る。このせいでサーフの流れが止められてしまう。とりあえず FindWindow で探して DestroyWindow するなんていう荒業で対処していたが、一度ダイアログが出ると、そのブラウザがマウス操作、キー操作を受け付けなくなるので問題だった。ダイアログが出なければ問題なし。
実はここにたどり着くまでに、MSDN の
How to handle script errors as a WebBrowser control host
を見たばっかりに COM の泥沼に落ちてしまった。IOleCommandTarget を実装するにはどうしたらいいのか。Active ドキュメント コンテナとはなんぞや..とか。おかげで少し COM の世界が理解できたかもしれない。
でももっと色々いじろうと思うと泥沼が待っているような。