jQuery en Greasemonkey 1.0 entra en conflicto con sitios web que usan jQuery

Resuelto Gary asked hace 12 años • 3 respuestas

Desde que se lanzó el nuevo Greasemonkey 1.0 hace unos días, todos los sitios que tienen jQuery y donde uso jQuery en mi script de Greasemonkey no ejecutan mi script correctamente. El jQuery que tengo en mi script GS (usando los @requiremetadatos) entra en conflicto con el jQuery de la página. Esto se debe al nuevo @grantcódigo.

He leído la documentación pero todavía no sé cómo volver a ejecutar scripts GS en un entorno limitado; las únicas opciones parecen ser otorgar acceso a una API de GS o no otorgarlo a ninguna y ejecutar el script sin limitaciones de seguridad, lo cual no funciona en absoluto para mí cuando he diseñado mis docenas de scripts GS para ejecutar CON limitaciones de seguridad y me gusta así.

Gary avatar Aug 28 '12 00:08 Gary
Aceptado

Greasemonkey 1.0 cambió radicalmente la forma en que funciona el sandbox , eliminando miles de scripts. Este es un gran problema y espero que se unan a mí para expresar su opinión/experiencias sobre el informe de error principal de este problema .

El blog de Greasemonkey afirma que puedes solucionar el problema con lo siguiente :

this.$ = this.jQuery = jQuery.noConflict(true);

... Lo cual no estoy seguro de que funcione en todos los casos. Y es exactamente el enfoque equivocado de una filosofía de codificación atómica, que evita los efectos secundarios y utiliza el principio DRY . En mi opinión , la mejor estrategia es restaurar el sandbox.

Reactive la zona de pruebas especificando un @grantvalor (que no sea none). Edite su bloque de metadatos para que termine con las siguientes líneas :

// @grant       GM_addStyle
// @grant       GM.getValue
// ==/UserScript==
/*- The @grant directive is needed to work around a design flaws introduced in GM 1.0
    and again in GM 4.0.
    It restores the sandbox.
*/

Se restaurará la zona de pruebas y se resolverán todos los conflictos.
Y los scripts serán compatibles con motores superiores como Tampermonkey y Violentmonkey.

Brock Adams avatar Sep 04 '2012 00:09 Brock Adams

Dos años después, esta "característica" aún no ha sido suficientemente documentada ni abordada.

Los scripts que requieren jQuery aún entran en conflicto con algunas páginas que usan jQuery.

Las posibles soluciones son:

  1. Agregar @grant GM_logo similar a la zona de pruebas del script
  2. Alias ​​los objetos jQuery existentes en el script agregando este bloque:

    var my_jquery = jQuery;

    jQuery.noConflict(true);

    var $ = my_jquery, jQuery = my_jquery;

  3. No uses jQuery

Considerándolo todo, una decisión terrible por parte de Greasemonkey.

WackGet avatar May 28 '2015 14:05 WackGet

Tuve el mismo problema.

Desde la versión 1.0 de GM, todos mis scripts que @requirejQuery se ejecutan en sitios que también usan jQuery dejaron de funcionar.

Lo sé, podría intentar algo como $ = unsafeWindow.$, pero ese no es el punto.

El punto aquí es que antes funcionaban y ahora no lo harán.

Agregarlos @grant GM_loglos arregló.

RASG avatar Sep 21 '2012 12:09 RASG