現在の Web ページから選択したテキストを取得するために、次のコードを作成しました。
IHTMLDocument2 mainDoc = ... for ( int i = 0; i < mainDoc.frames.length; i++ ) { オブジェクト refIndex = i; var frame = (IHTMLWindow2)mainDoc.frames.item( ref refIndex ); IHTMLDocument2 frameDoc; 試す { frameDoc = frame.document; } catch ( UnauthorizedAccessException ex ) { // ソース: http://codecentrix.blogspot.com/2008/02/when-ihtmlwindow2document-throws.html var sp = (IServiceProvider) フレーム; // IServiceProvider.QueryService を使用して IWebBrowser2 オブジェクトを取得します。 オブジェクト brws = null; sp.QueryService(ref IID_IWebBrowserApp、ref IID_IWebBrowser2、out brws); // IWebBrowser2 からドキュメントを取得します。 IWebBrowser2 ブラウザ = (IWebBrowser2)brws; frameDoc = (IHTMLDocument2)browser.Document; } var range = frameDoc.selection.createRange() as IHTMLTxtRange; if ( !string.IsNullOrEmpty(range.text) ) return range.text; } string.Empty を返します。
ただし、特定の Web ページでは、frameDoc.selection.createRange() を呼び出すと UnauthorizedAccessException がスローされます。
System.UnauthorizedAccessException が処理されませんでした Message="アクセスが拒否されました。(HRESULT からの例外: 0x80070005 (E_ACCESSDENIED))" ソース="Microsoft.mshtml" スタックトレース: mshtml.IHTMLSelectionObject.createRange() で
このエラーを回避するにはどうすればよいですか?