كيف يمكنني تقليد غرسمونكي/فايرفوكس unsafeWindow وظائف في كروم ؟

StackOverflow https://stackoverflow.com/questions/1622145

سؤال

أنا مجرد تافه حولها مع المستخدم النصوص في كروم الآن لذا يرجى أن تضع مع قدراتي الجهل/البلاهة.

في الصفحة أكتب السيناريو ، هناك <script> العنصر الذي يعلن متغير x.هل هذا يعني أن المستخدم في بلدي النصي, أنا يمكن فقط الوصول x من مساحة العالمي?

على سبيل المثال ، إذا كان الخط الوحيد في userscript هو alert(x);, يجب أن تعمل كما هو متوقع (على افتراض x هو سلسلة)?أنا أفهم كروم لا يدعم unsafewindow ، ولكن لسبب ما أنا وجدت أنه من المستحيل معرفة كيف تحاكي وظائف.هل من الممكن ؟

هل كانت مفيدة؟

المحلول

contentWindow متاح في الكروم 3 ، ولكن إزالة الكروم 4.فقط ممكن حل كروم 4:

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

نصائح أخرى

وهذا سوف تعطيك إشارة إلى كائن الإطار (كما ع):

var p = unsafeWindow;

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

تحديث:
على onclick استغلال يعد يعمل في أحدث كروم النشرات.

للحصول على unsafeWindow وظائف في كروم, أفضل رهان هو أن التركيب والاستخدام Tampermonkey - التي تريد أن تكون ذكية القيام به ، بغض النظر عن.Tampermonkey لديه الدعم الكامل غرسمونكي API و أسهل بكثير النصي الإدارة.

مخطوطات و Tampermonkey النصوص هي دائما تقريبا متوافق تماما, شيئا ليس صحيحا عادي كروم userscripts.

التخلي عن Tampermonkey, البديل الوحيد الذي لا يزال يعمل هو استخدام بعض شكل حقن النصي.



التالي هو الآن عفا عليها الزمن:

كروم الآن يعرف unsafeWindow بالنسبة userscripts / المحتوى-مخطوطات, ولكن كروم unsafeWindow لا تزال لا تسمح بالوصول إلى شبيبة الكائنات التي تم إنشاؤها من قبل صفحة الهدف.

هنا كيفية تقديم بشكل صحيح غير آمنة ، unsafeWindow - في عبر متصفح الطريقة التي يستخدم ميزة الكشف (جيد) مقابل متصفح استنشاق (سيئة):

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

إذا كنت تريد التفاعل مع الصفحة وجافا سكريبت، سيكون لديك لإدراج النصي في الصفحة. (إلا إذا كنت ترغب في استخدام أي من الخارقة اقترح في هذه الصفحة، بالطبع). لقد يطبخ وظيفة لفعل ذلك للمخطوطات بلدي، وأنا سوف الرد عليه هنا في حالة أي شخص يريد استخدامها.

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

وهناك أمثلة قليلة لتوضيح:

//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.

وطيب هيريس فكرة يمكنك حقن النصي باستخدام شريط عنوان ...

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

وبعد ذلك يمكنك تشغيل كل ما تريد في نافذة مع جافا سكريبت الخاصة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top