Использовать Recaptcha без unsafeWindow? - PullRequest
1 голос
/ 24 марта 2012

Я уже читал эти методы как альтернативу для unsafeWindow. Но я все еще не могу заставить его работать, используя объект Recaptcha без unsafeWindow. Мой код с использованием unsafeWindow (этот код работает нормально):

var myscript= document.createElement('script');
myscript.setAttribute('src','http://www.google.com/recaptcha/api/js/recaptcha_ajax.js');
document.body.appendChild(myscript);
Recaptcha = unsafeWindow.Recaptcha; 
Recaptcha.create(theKey,"recaptcha_widget_div",{theme:"red"});

Я попробовал это без удачи:

//after script inject
Recaptcha = location.assign("javascript:Recaptcha();void(0)");
Recaptcha.create(theKey,"recaptcha_widget_div",{theme:"red"});

Что я сделал не так с взломом локации?

Обратите внимание, что я хочу, чтобы код также можно было использовать в скрипте содержимого Chrome.

1 Ответ

1 голос
/ 24 марта 2012

location.assign() загружает новую страницу; «убрать» скрипт и любые переменные, такие как Recaptcha.

В этом случае продолжайте и используйте unsafeWindow. Это не так уж важно, если вы не знаете, что веб-мастер нацелен на скрипты Greasemonkey.

В этом случае это даже менее опасно, потому что вы добавляете код рекапчи. Целевой страницы нет.


Обновление:
ОП указал, что это должно работать и в скриптах содержимого Chrome. В этом случае введите обе части следующим образом:

function addJS_Node (text, s_URL) {
    var D                                   = document;
    var scriptNode                          = D.createElement ('script');
    if (text)       scriptNode.textContent  = text;
    if (s_URL)      scriptNode.src          = s_URL;

    var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
    targ.appendChild (scriptNode);
}

addJS_Node (null, 'http://www.google.com/recaptcha/api/js/recaptcha_ajax.js');

//-- Might need a delay here, but probably not.
addJS_Node ('Recaptcha.create(theKey,"recaptcha_widget_div",{theme:"red"});');
...