4

現在の 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() で

このエラーを回避するにはどうすればよいですか?

4

1 に答える 1

1

これは予想される動作です。クロスサイト スクリプティングはデフォルトで無効になっており、ドメインに関係なくフレーム全体でスクリプトを実行しています。

于 2011-05-25T16:30:09.907 に答える