使用Recaptcha而不使用unsafeWindow?

时间:2012-03-24 00:49:34

标签: javascript greasemonkey recaptcha userscripts

我已经将这些方法作为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 个答案:

答案 0 :(得分:1)

location.assign()加载新页面; “poofing”远离脚本和任何变量,如Recaptcha

在这种情况下,请继续使用unsafeWindow。除非你知道网站管理员的目标是Greasemonkey脚本,否则这并不是什么大不了的事。

在这种情况下,它甚至更不危险,因为正在添加重新访问代码。目标页面不是。


<强>更新
OP表示这也适用于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"});');