2009-11-05 8 views
8

Me pregunto si puede hacer que Greasemonkey se ejecute contra un iframe solamente y no su ventana principal. La ventana principal es el dominio A, el iframe es el dominio B y la inclusión en el script sería @include http://domain-B.com/path/ *.Greasemonkey contra un iframe usando @include - ¿funciona esto?

No necesito ninguna interacción con el padre. Lo he intentado un par de veces sin éxito. ¿Hay alguna restricción entre dominios que impida que alguien ejecute contra el iframe?

PD: El iframe tiene código JS que impide que se cargue como la ventana superior.

Respuesta

11

Bueno, ciertamente es posible hacer que Greasemonkey corra contra un iframe; de ​​hecho, es un common question para determinar cómo evitar que se ejecute tanto en iframes como en la página principal. Usted debe ser capaz de tomar la inversa de la respuesta a evitar que el código se ejecute en la ventana superior:

if (window.top == window.self) //don't run on the top window 
    return; 
//rest of the actual executing code goes here 

Lo he probado y se puede utilizar @include para que coincida con el dominio B (el dominio de la iframe) y ejecutar una pieza de código arbitrario que lo modifica. Ejecuté el siguiente usuario de prueba en un test page y oculta con éxito el logotipo de Google (solo cuando Google está en un iframe).

// @include http://www.google.com* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 
// ==/UserScript== 

if (window.top == window.self) //don't run on top window 
    return; 

alert('running on a frame'); 

$('img').each(function() { 
    $(this).hide(); 
}); 

Por lo que puedo ver, no hay ninguna restricción entre dominios involucrada aquí. No estoy seguro de qué ocurre si el iframe no está presente cuando la página se carga por primera vez (que es cuando se ejecuta Greasemonkey).

+0

domain-b nunca se ejecuta es el problema debido a restricciones entre dominios en el navegador. Hacer restricciones entre dominios y no tener acceso a la fuente en el dominio-b No puedo leer los DIV para determinar si algo existe. Esperaba que el @include domain-b se activara en el iframe (que es domain-b) y, por lo tanto, tendría acceso al marcado mediante el script de GM. Continuaré explorando varios enfoques. – nopuck4you

+0

Bueno, funcionó para mí: puedo ejecutar un script de Greasemonkey en un dominio de terceros 'iframe' cuando' @ include' solo el dominio 'iframe'. He actualizado mi respuesta con un código de muestra y una página de prueba para probarlo. – npdoty

Cuestiones relacionadas