evento - jQuery Off() no funciona en la extensión de Chrome
unbind jquery español (1)
Creé una extensión de Chrome basada en https://robots.thoughtbot.com/how-to-make-a-chrome-extension (mira al final para ver los archivos completados)
He hecho dos cambios. Utilicé JQuery 3.1.1 minimizado en lugar del anterior dado en la página anterior; y cambié content.js:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if( request.message === "clicked_browser_action" ) {
$(document).off("touchmove mousewheel mousemove scroll");
}
}
);
El comando $ (document) .off () no funciona cuando hago clic en el botón de la extensión con una página de prueba apropiada abierta. No da error, simplemente no hace nada.
He comprobado. Si $(document).off("touchmove mousewheel mousemove scroll");
en la consola en la página que quiero afectar, funciona bien. Si se ejecuta en la extensión, no lo es.
Intenté comprobar que el document
era correcto en la extensión y document.domain
da el resultado correcto cuando se marca en un punto de interrupción en la extensión (y en la consola de la página).
Intenté comprobar jQuery._data( jQuery(document)[0]).events["touchmove"]
(y "mousewheel", "mousemove", "scroll") y funciona en la consola, pero me sale un error ( Cannot read property ''touchmove'' of undefined
) si rompo la extensión. Cuando revisé más, jQuery._data( jQuery(document)[0])
da lo siguiente:
En consola:
Object
events: Object
handle: function (e)
__proto__: Object
En punto de interrupción:
Object
__proto__: Object
He intentado algunas otras cosas (por ejemplo, que jQuery es accesible y funciona, etc.).
¿Alguien puede ayudar?
Su secuencia de comandos de contenido está en un contexto / alcance diferente al de los scripts de página (scripts que ya existen en la página web). Para ejecutar código en el contexto de script de página, tiene que crear e insertar un elemento <script>
en el DOM de la página.
Podrías cambiar tu código a:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if( request.message === "clicked_browser_action" ) {
let newScript = document.createElement(''script'');
newScript.innerHTML=''$(document).off("touchmove mousewheel mousemove scroll");'';
document.head.appendChild(newScript);
}
}
);
El script agregado se ejecuta porque ahora es un elemento <script>
en el DOM. El navegador reconoce que se agregó un elemento <script>
y lo evalúa (ejecuta el código que contiene) tan pronto como el script que lo insertó ya no se procesa. Básicamente, hace lo mismo con cualquier otro elemento que agregue al DOM. Debido a que es parte de la página, el código dentro de <script>
se ejecuta en el contexto / alcance del script de la página.