Frage

Ich bin nur mit User-Skripte in Chrom Hantieren gerade jetzt, so wenden Sie sich bitte tragen mit meinem Potential Ignoranz / Idiotie.

In der Seite, die ich für ein Skript gerade schreibe, gibt es eine <script> Element, das eine variable x erklärt. Ist dies das bedeutet, in meinem Benutzerskript, kann ich nur x aus dem globalen Namensraum zugreifen?

Zum Beispiel, wenn die einzige Zeile in meinem userscript alert(x); ist, sollte diese Arbeit wie erwartet (unter der Annahme x ist ein String)? Ich verstehe, Chrom nicht unsafewindow nicht unterstützt, aber aus irgendeinem Grunde Ich finde es unmöglich, herauszufinden, wie die Funktionalität zu imitieren. Ist es überhaupt möglich?

War es hilfreich?

Lösung

contentWindow war in Chrome 3 verfügbar, aber in Chrome 4 entfernt . Einzig mögliche Lösung für Chrome 4:

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

Andere Tipps

Dies gibt Ihnen einen Verweis auf das Fensterobjekt (wie p):

var p = unsafeWindow;

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

Update:
Die onclick ausnutzen funktioniert nicht mehr in den aktuellen Chrome Releases.

unsafeWindow Funktionalität in Chrome zu erhalten, ist Ihre beste Wette zu installieren und verwenden Tampermonkey - die Sie klug sein würde, unabhängig zu tun. Tampermonkey hat volle Unterstützung für die Greasemonkey API und viel einfacher Skript-Management.

Greasemonkey-Skripte und Tampermonkey Skripte sind fast immer voll kompatibel, etwas, das für Normal Chrome userscripts nicht wahr ist.

Der Verzicht Tampermonkey, die einzige Alternative, die immer noch funktioniert, ist eine Form von Skripteinschleusung zu verwenden.



Das folgende ist jetzt veraltet:

Chrome definiert nun unsafeWindow für userscripts / content-Skripte , aber Chrome unsafeWindow erlaubt noch keinen Zugriff auf JS-Objekte erstellt von der Zielseite.

Hier ist, wie ein richtig unsicher, unsafeWindow bieten - in einer Cross-Browser-Art und Weise, die Feature-Erkennung (gut) im Vergleich zu Browser Sniffing (Bad) :

/*--- 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 ();
    } ) ();
}

Wenn Sie mit Seite JavaScript zu interagieren möchten, müssen Sie ein Skript in eine Seite einfügen. (Es sei denn, Sie eine der Hacks verwenden möchten auf dieser Seite vorgeschlagen, natürlich.) Ich habe eine Funktion, gekocht, genau das für meine eigene Skripte zu tun, ich es hier bei Post wird jemand will, es zu benutzen.

/*
    @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}
}

Einige Beispiele zu verdeutlichen:

//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 here eine Idee, die Sie das Skript injizieren können die Adresszeile mit ...

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

, dann können Sie ausführen, was Sie im Fenster mit Javascript wollen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top