4
j'ai écrit le code suivant pour récupérer le texte sélectionné à partir de la page Web en cours:IHTMLSelectionObject.createRange() renvoie 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;
Mais sur certaines pages Web, l'appel à frameDoc.selection.createRange() renvoie une UnauthorizedAccessException :
System.UnauthorizedAccessException was unhandled Message="Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))" Source="Microsoft.mshtml" StackTrace: at mshtml.IHTMLSelectionObject.createRange()
Comment puis-je éviter cette erreur?
Ça fait longtemps. Mais as-tu déjà résolu ça? – Boydski
'frameDoc.selection.createRange()' ne renvoie pas nécessairement un IHTMLTxtRange - peut-être d'abord interroger la propriété 'selection.type'? Voir http://msdn.microsoft.com/en-us/library/aa768848%28v=vs.85%29.aspx – barrowc