Estoy usando Webview2 en mi aplicación winforms. Puedo inyectar javascript y cuando el usuario hace clic en cualquier elemento, puedo acceder a la identificación, el nombre o el nombre de la etiqueta del elemento en el que se hizo clic.
private async void webBrowser_CoreWebView2InitializationCompleted(object sender, Microsoft.Web.WebView2.Core.CoreWebView2InitializationCompletedEventArgs e) { string script = File.ReadAllText("Mouse.js"); await webBrowser.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync(script); } private async void webBrowser_WebMessageReceived(object sender, Microsoft.Web.WebView2.Core.CoreWebView2WebMessageReceivedEventArgs e) { BrowserEvent_JSON obj = JsonConvert.DeserializeObject<BrowserEvent_JSON>(e.WebMessageAsJson); tbCtrlName.Text = (obj.eventName + " - " + obj.eventValue); tbLocators_Id.Text = obj.elemId; tbLocators_Name.Text = obj.elemName; tbLocators_Value.Text = obj.eventValue; tbLocators_Index.Text = obj.elemTagName; tbLocators_Pixels.Text = obj.elemPixels; }Estoy interesado en obtener el HTMLElement completo en el que el usuario ha hecho clic. El desafío al que me enfrento es que no todos los elementos de la página web pueden tener una identificación, por lo que tratar de recuperar el elemento usando Javascript inyectado y getElementById no funcionará.
Para aclarar más, digamos que hay 3 hipervínculos en la página web. Mi código ahora me dice en qué tipo de elemento se ha hecho clic: el nombre de la etiqueta devuelta es A. Pero no hay más detalles a los que pueda acceder en cuanto a qué elemento de enlace se hizo clic, cuál era la fuente, etc. Lo mismo ocurre con otros controles.
El webview.document.activeElement no almacena ningún valor para que pueda acceder y siempre es nulo. Estoy pensando en cargar el html en un elemento HTML Agility e intentar buscar el elemento en el que se hizo clic allí, pero allí también estoy atascado en cómo obtener la información del localizador en el que necesito buscar, ya que es posible que la ID no siempre se especifique para cada elemento. .
Compartiendo el contenido del archivo Mouse.js.
document.addEventListener('contextmenu', function (event) { let elem = event.target; let jsonObject = { eventName: 'right-click', eventValue: elem.value || "Unknown", elemName: elem.name || "Unknown", elemId: elem.id || "Unknown", elemTagName: elem.tagName || "Unknown", elemPixels: event.clientX + "," + event.clientY }; window.chrome.webview.postMessage(jsonObject); });