jQuery.trigger('click') no funciona en Chrome Extension en Mac

Como mi extensión de Chrome no funcionaba en Mac, desglosé el código y encontré el problema:

fondo.js

chrome.browserAction.onClicked.addListener(function(tab){
    alert("Goin to");
    chrome.tabs.executeScript(tab.id, {file: "script.js"});
});

script.js

$('#Hoster_30').trigger('click');
alert("Clicked");

jQuery está cargado y se muestran ambas alertas, pero el evento de clic no se activa. Funciona bien cuando ingreso directamente el activador en la consola js en la página y en Windows también funciona en el complemento.

Aqui mi manifest.json

{
    "name": "MacAddon",
    "version": "0.1",
    "permissions": ["tabs", "http://*/", "https://*/"],
    "background": {
        "scripts": ["background.js"]
    },  
    "browser_action": {
        "default_title": "MacAddon"
    },
    "content_scripts": [
    {
      "matches": ["http://*.kinox.to/*", "http://*.streamcloud.eu/*"],
      "js": ["jquery.js"]
    }
    ]
}

preguntado el 29 de julio de 12 a las 15:07

Debería haber editado su pregunta anterior para incluir el código (no crear uno nuevo). Pero buen trabajo, ahora ha creado una demostración para reproducir el problema. Eso es lo que a nosotros, los usuarios de SO, nos gusta ver, -

¿En qué página estás probando la extensión? Ninguno http://kinox.to/ ni http://streamcloud.eu/ tener un elemento con ID Hoster_30. -

kinox.to/Stream/Die_Simpsons.html cada película y serial tiene un Hoster_30 -

$('#Hoster_30').data('events').click[0].handler me mostró que se ejecuta el siguiente código: ` getPlayerByMirror(this,'Auto');. Is the problem solved if you directly call this function, with este `siendo el elemento? Dado que la función está definida en la página, debe inyectar el script para probarlo. Ver stackoverflow.com/q/… -

No, esto no funciona, pero getPlayerByMirror($('#Hoster_30'), 'Auto') trabajó. Gracias, lo usaré por ahora, pero si alguien tiene una idea de por qué el evento de clic solo funcionó en Windows, sería bueno:

1 Respuestas

Para Chrome 19-, tienes que inyectar el código y use el método propio del sitio web para cambiar el episodio.

var s = document.createElement('script');
s.textContent = "getPlayerByMirror($('#Hoster_30'), 'Auto');";
s.onload = function() {
    this.parentNode.removeChild(this);
};
document.head.appendChild(s);

(Para averiguar qué función tenía que ser llamada, yo inspeccionó el $().data('events') objeto en la consola: $('#Hoster_30').data('events').click[0].handler).
En Chrome 20+, usando .trigger('click') del script de contenido funcionó bien:

$('#Hoster_30').trigger('click');

Muchas Gracias Rob W. por recibirme tan grandemente aquí y respondiendo la pregunta!

contestado el 23 de mayo de 17 a las 12:05

No funcionó para mí, alternativamente usé createEvent nativo y dispatchEvent - Shady Mohamed Sherif

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.