Pregunta

Estoy jugando con los scripts de usuario en Chrome en este momento, así que tenga en cuenta mi potencial ignorancia / idiotez.

En la página para la que escribo un script, hay un elemento <script> que declara una variable x. ¿Esto significa que, en mi script de usuario, puedo acceder alert(x); desde el espacio de nombres global?

Por ejemplo, si la única línea en mi script de usuario es <=>, ¿debería funcionar como se esperaba (suponiendo que <=> es una cadena)? Entiendo que Chrome no admite ventanas inseguras, pero por alguna razón me resulta imposible descubrir cómo imitar la funcionalidad. ¿Es posible?

¿Fue útil?

Solución

contentWindow estaba disponible en Chrome 3, pero eliminado en Chrome 4 . Única solución posible para Chrome 4:

location.href="javascript:(function(){ alert('Hello'); })()"

Otros consejos

Esto le dará una referencia al objeto de ventana (como p):

var p = unsafeWindow;

if(window.navigator.vendor.match(/Google/)) {
    var div = document.createElement("div");
    div.setAttribute("onclick", "return window;");
    p = div.onclick();
};

Actualización:
El exploit onclick ya no funciona en las últimas versiones de Chrome.

Para obtener la funcionalidad unsafeWindow en Chrome, su mejor opción es instalar y usar Tampermonkey , que sería inteligente hacer, independientemente. Tampermonkey tiene soporte completo para la API de Greasemonkey y una gestión de script mucho más fácil.

Las secuencias de comandos de Greasemonkey y las secuencias de comandos de Tampermonkey son casi siempre totalmente compatibles, algo que no es cierto para las secuencias de comandos de usuario simples de Chrome.

Renunciando a Tampermonkey, la única alternativa que aún funciona es usar alguna forma de inyección de script .



Lo siguiente ahora está obsoleto:

Chrome ahora define <=> para los scripts de usuario / scripts de contenido , pero el <=> de Chrome todavía no permite el acceso a objetos JS creados por la página de destino.

A continuación, le mostramos cómo proporcionar un entorno inseguro, <=> de forma cruzada que utiliza Detección de funciones (bueno) versus Exploración del navegador (malo) :

/*--- Create a proper unsafeWindow object on browsers where it doesn't exist
    (Chrome, mainly).
    Chrome now defines unsafeWindow, but does not give it the same access to
    a page's javascript that a properly unsafe, unsafeWindow has.
    This code remedies that.
*/
var bGreasemonkeyServiceDefined     = false;

try {
    if (typeof Components.interfaces.gmIGreasemonkeyService === "object") {
        bGreasemonkeyServiceDefined = true;
    }
}
catch (err) {
    //Ignore.
}

if ( typeof unsafeWindow === "undefined"  ||  ! bGreasemonkeyServiceDefined) {
    unsafeWindow    = ( function () {
        var dummyElem   = document.createElement('p');
        dummyElem.setAttribute ('onclick', 'return window;');
        return dummyElem.onclick ();
    } ) ();
}

Si desea interactuar con la página JavaScript, deberá insertar un script en una página. (A menos que quiera usar cualquiera de los trucos sugeridos en esta página, por supuesto). He creado una función para hacer eso para mis propios scripts, la publicaré aquí en caso de que alguien quiera usarla.

/*
    @description    This function will insert the given code as a <script> or <style> block into a page.
    @param The code to insert; supported types are: JavaScript Function, String (JavaScript), String (CSS).
    @param2 Optional: The type of code that is inserted. If omitted, "js" is assumed. Possible values are 'js' or 'css'.
    @return The HTML element that was inserted, or FALSE on failure
*/
function insert(z,t){
    var j,f,x,c,i,n,d
    d=document
    c=d.createElement
    i=d.head.appendChild
    a=d.createTextNode
    if(typeof z==='function') j=!0,f=!0;
    if((t=='js'||!t)&&!f){j=!0,f=!1}
    if(t=='css'&&!j){x=c('style');x.setAttribute('type','text/css')}
    if(j){x=c('script');x.setAttribute('type','text/javascript')}
    if(f) n=a('('+z+')()');else n=a(z)
    x.appendChild(n)

    if(x){return i(x)}else{return !1}
}

Algunos ejemplos para aclarar:

//Inserting a JavaScript function
var func=function(){
    stopAds();
    startFileDownload();
}

insert(func);


//Inserting JavaScript as a string
var strJS="prompt(\"Copy:\",someVariableAtThePage);";

insert(strJS);
//Or with an OPTIONAL 2nd parameter:
insert(strJS,'js');


//Inserting CSS
var strCSS=".ad{display:none !important}    #downloadButton{display:block}";

insert(strCSS,'css');//Specifying 2nd parameter as "css" is required.

ok, aquí tienes una idea de que puedes inyectar el script usando la barra de direcciones ...

javascript:var ElEm = document.createElement("script");ElEm.src='[path_to_script]';document.body.appendChild(ElEm);

entonces puedes ejecutar lo que quieras en la ventana con tu javascript

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top