Recientemente, después de algunas actualizaciones de software (actualización automática de Windows 10 y posiblemente una actualización automática de Chrome), las herramientas de desarrollo para la depuración remota desde QWebEngine de Qt dejaron de funcionar. La consola JavaScript muestra esto:
Uncaught TypeError: document.registerElement is not a function at Object.UI.registerCustomElement (shell.js:formatted:18064) at shell.js:formatted:18178 at shell.js:formatted:18266 devtools_app.js:formatted:2606 Uncaught ReferenceError: SDK is not defined at devtools_app.js:formatted:2606El código en cuestión (de shell.js) es este:
UI.registerCustomElement = function(localName, typeExtension, prototype) { return document.registerElement(typeExtension, { prototype: Object.create(prototype), extends: localName }); }¿Qué es shell.js y de dónde viene? ¿Cúal podría ser la causa de este problema?
La página web en realidad se está ejecutando en un navegador web Qt 5.12.3, pero estoy usando Chrome (de forma remota) para las herramientas de desarrollo.
También actualicé Angular 7.x a Angular 8 al mismo tiempo, pero ya no creo que esto esté relacionado.
Mi Chrome es actualmente la versión 80.0.3987.116 (compilación oficial) (64 bits).
ACTUALIZAR Acabo de intentar descargar una versión anterior de Chromium. (Probé la versión 77.0.3823.0 ya que data de mediados de 2019). Y la depuración allí FUNCIONA.
Chrome 80 ha obsoleto WebComponents v0, que utilizan estas herramientas de desarrollo.
La solución es iniciar Chrome con parámetros adicionales que vuelvan a habilitar la función (mientras aún está en el motor):
--enable-blink-features=ShadowDOMV0,CustomElementsV0O para usar una compilación de Chromium correspondiente a Chrome 79.x, por ejemplo
Windows: https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win_x64/706915/ Mac: https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Mac/706915/ Linux: https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Linux_x64/706915/Google eliminó WebComponents V0 de Chrome, pero la GUI para la depuración remota los usa. Entonces, cuando intenta iniciar la depuración remota en el dispositivo con Chrome antiguo a bordo, el depurador falla con
Uncaught TypeError: document.registerElement is not a functionEncontré dos formas de luchar contra esto.