4
我寫了下面的代碼從當前網頁檢索所選文本:IHTMLSelectionObject.createRange()拋出UnauthorizedAccessException
IHTMLDocument2 mainDoc = ... for (int i = 0; i < mainDoc.frames.length; i++) { object refIndex = i; var frame = (IHTMLWindow2)mainDoc.frames.item(ref refIndex); IHTMLDocument2 frameDoc; try { frameDoc = frame.document; } catch (UnauthorizedAccessException ex) { // Source: http://codecentrix.blogspot.com/2008/02/when-ihtmlwindow2document-throws.html var sp = (IServiceProvider)frame; // Use IServiceProvider.QueryService to get IWebBrowser2 object. object brws = null; sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out brws); // Get the document from IWebBrowser2. IWebBrowser2 browser = (IWebBrowser2)brws; frameDoc = (IHTMLDocument2)browser.Document; } var range = frameDoc.selection.createRange() as IHTMLTxtRange; if (!string.IsNullOrEmpty(range.text)) return range.text; } return string.Empty;
但在某些特定的網頁,調用frameDoc.selection.createRange()拋出UnauthorizedAccessException :
System.UnauthorizedAccessException was unhandled Message="Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))" Source="Microsoft.mshtml" StackTrace: at mshtml.IHTMLSelectionObject.createRange()
如何避免此錯誤?
已經有一段時間了。但你有沒有解決這個問題? – Boydski 2010-11-30 18:10:12
'frameDoc.selection.createRange()'不一定會返回一個IHTMLTxtRange - 可能首先查詢'selection.type'屬性?請參閱http://msdn.microsoft.com/en-us/library/aa768848%28v=vs.85%29.aspx – barrowc 2011-02-08 04:27:50