2012-03-24 2 views
1

Я уже читал эти методы как альтернативу для небезопасныхWindow. Но я все еще не могу заставить его работать с объектом Recaptcha без unsafeWindow. Мой код с использованием unsafeWindow является (этот код работает отлично):Использовать Recaptcha без 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

Любопытно, почему вы используете Greasemonkey для добавления recaptcha? Разве вы не знаете, являетесь ли вы человеком или нет? Не слишком много ботов запускают Firefox с включенным GM. –

+0

Я создал сценарий для форума, который не предоставляет форму ответа на странице содержимого. пользователю нужно перейти на другую страницу, чтобы ответить на сообщение. И, конечно, для ответа требуется ответ. –

ответ

1

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

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

Это еще менее опасно в этом случае, потому что вы добавляют код recaptcha. На целевой странице нет.


Update:
ФП показал, что это должно работать в 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"});'); 
+0

На самом деле, я хотел бы сделать мой скрипт доступным для chrome без поддержки аддона, такой как обезьяна-подделка, без нее хром не сможет запустить unsafeWindow. –

+0

Если вы хотите сделать этот Chrome совместимым, скажите, пожалуйста, в этом вопросе! См. Обновленный ответ. –

+0

в порядке, он работает. просто нужно задержка. –