utilizando sesión requerir que página puede plantilla inicio google extensiones estás chrome bloquear administrativa acceso javascript google-chrome dom google-chrome-extension

javascript - plantilla - la red que estás utilizando puede requerir el acceso a su página de inicio de sesión chrome



¿Puede un sitio web bloquear una extensión de Chrome? (2)

Ya que la otra respuesta realmente no respondió nada acerca de detener realmente una extensión, pensé que agregaría mis propios dos centavos. Al usar el método en la otra respuesta, a veces puede detectar si una extensión en particular está instalada y reaccionar en consecuencia, pero esto requiere que pruebe una cadena de identificación y un archivo en particular para esa extensión en particular. Estoy seguro de que todos podemos estar de acuerdo en que esta no es una solución muy abarcadora.

Hay muchas cosas acerca de las extensiones que no puedes detener dentro de tu sitio, como la API chrome.webRequest que usa Adblock. No hay nada que puedas hacer para interferir directamente con ese tipo de código, pero hay mucho que puedes hacer en el lado de la manipulación de DOM.

Content Scripts operan en un isolated world lo que significa que no pueden ver / interactuar con el javascript que se ejecuta en el sitio. Sin embargo, tienen acceso completo al DOM y pueden hacer lo que quieran. A la inversa, su propio javascript tiene el mismo acceso a ese DOM. Aprovechando ese isolated world , podemos configurar un MutationObserver para vigilar el DOM y evitar cualquier cambio no deseado. Debido al isolated world , los content scripts no pueden deshabilitar o desactivar nuestro observador, mientras que nuestro propio javascript puede hacerlo libremente.

Aquí hay un ejemplo de un MutationObserver que bloquea el DOM con un poco de jQuery mezclado porque soy perezoso.

var config= {childList: true, attributes: true, characterData: true, subtree: true, attributeOldValue: true, characterDataOldValue: true}; var observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ switch(mutation.type){ case "attributes": observer.disconnect(); if(mutation.attributeName == "class") mutation.target.className = mutation.oldValue; else if(mutation.attributeName=="id"||mutation.attributeName=="title") mutation.target[mutation.attributeName] = mutation.oldValue; else if(mutation.attributeName == "style") mutation.target.style.cssText = mutation.oldValue; observer.observe(document,config); break; case "characterData": observer.disconnect(); mutation.target.data = mutation.oldValue; observer.observe(document,config); break; case "childList": observer.disconnect(); if(mutation.addedNodes.length > 0) $(mutation.addedNodes[0]).remove(); if(mutation.removedNodes.length > 0){ if(mutation.nextSibling) $(mutation.removedNodes[0]).insertBefore(mutation.nextSibling); else if(mutation.previousSibling) $(mutation.removedNodes[0]).insertAfter(mutation.previousSibling); else $(mutation.removedNodes[0]).appendTo(mutation.target); } observer.observe(document,config); break; } }); }); $(function(){ observer.observe(document,config); });

Lanzándolo a una extensión de cromo con un manifiesto simple como:

{ "name": "DOM Polymerase", "version": "1.0", "manifest_version": 2, "permissions": [ "tabs","<all_urls>" ], "content_scripts": [{ "matches": ["http://example.iana.org/*"], "js": ["jquery-1.8.3.min.js","polymerase.js"] }] }

Y navegar a http://example.iana.org/ mostrará que la manipulación externa del DOM (a excepción de algunos atributos, no los codifiqué todos allí) ya no es posible. Por supuesto, en este caso, también se niega la manipulación interna, pero si el código estuviera en el sitio en lugar de una extensión, sería una historia diferente. Si bien esto no desactiva las extensiones por completo, al menos debería conservar su DOM.

Esta pregunta ya tiene una respuesta aquí:

¿Es posible bloquear las extensiones de Chrome para que no se ejecuten en sitios web particulares?

Digamos que tengo un sitio web www.foo.com , ¿es posible que bloquee las extensiones de Chrome (en particular, los scripts de contenido) para que no funcionen en mi sitio web o que dejen de acceder al DOM?


Para la respuesta corta a la pregunta, vaya a la 4ª edición:

Necesita saber el ID de extensión de la Extensión que desea bloquear, para que funcione.

Aquí hay un sitio de prueba del sitio de prueba de prueba de Concept

Y aquí está la información detrás de la Solución: Introducción a la piratería de complementos de Chrome: huellas digitales

Ahora que sabe qué extensiones se están ejecutando, puede redirigir / bloquear / ...

Espero que ayude.

Editar:

Probado con (Chrome versión 27.0.1453.94) en Windows XP

Edición 2:

Esta técnica solo funcionará si:

  1. Ya sabes el extensionid :)
  2. ¡IMPORTANTE! al menos un Recurso (como el manifiesto.json, alguna imagen, secuencia de comandos, ...) se establece como "web_accessible_resources" (en el manifiesto) O la extensión aún usa una versión de manifiesto 1 y no tiene ningún conjunto "web_accessible_resources". (Recurso del Link sitio chrome dev)

Edición 3:

Extensión del caso: JSONView

Podrías detectar la extensión con este código (solo código de ejemplo):

<script src="chrome-extension://chklaanhfefbnpoihckbnefhakgolnmc/error.gif" onerror="console.info(''Extension Not Found'')" onload="console.info(''Extension Found'')"></script> <!-- since the the file error.gif is allowed in the manifest "web_accessible_resources" (any other file mentioned there would also be fine) --> <!-- the block code should come in the onload of the script tag --> <!-- tested with Chrome 27+ WinXp -->

Algún contexto: la extensión JSONView tiene un manifiesto de la versión 2:

... "manifest_version": 2, "name": "JSONView", ...

por lo tanto, de forma predeterminada, no puede acceder al archivo de manifiesto como se menciona en la sección "Prueba de concepto" anterior.

PERO usa el atributo "web_accessible_resources" en el Manifiesto, que permite a los sitios web acceder a archivos desde la Extensión.

... "web_accessible_resources": [ "jsonview.css", "jsonview-core.css", "content_error.css", "options.png", "close_icon.gif", "error.gif" ] ...

Así que ahora puedes llamar a cualquiera de estos archivos desde tu página web.

ejemplo:

chrome-extension://chklaanhfefbnpoihckbnefhakgolnmc/error.gif chrome-extension://chklaanhfefbnpoihckbnefhakgolnmc/jsonview.css ...

Y con esta url en una Imagen / Script / .. -Etiqueta puedes saber si la extensión está ahí, si se dispara el evento onload.

Ps: solo probé esto con Chrome versión 27.0.1453.94 en Windows XP, en otras versiones puede que no funcione. (ver comentario de TJ Crowder)

PPs: para más detalles verifique los recursos de Chrome Developer. Aquí está el enlace a la extensión en la página de Link Recursos de Link página de recursos de Chrome)

Edición 4:

No creo que se pueda bloquear por sí mismo, pero si puede detectar la extensión como se mencionó anteriormente, podría:

  • redirigir fuera de tu página
  • o abra un mensaje (cada pocos segundos) que diga "deshabilitar la extensión de este sitio"
  • o puede consultar el Código de extensión para ver si tal vez podría "romperse" u obstaculizar su funcionalidad.
  • o podrías usar algún código como en la respuesta de BeardFist