2012-03-24 44 views
1

我已經閱讀這些方法作爲unsafeWindow的替代方法。但我仍然無法使用沒有unsafeWindow的Recaptcha對象。 使用unsafeWindow我的代碼(此代碼工作正常):使用沒有unsafeWindow的Recaptcha?

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?你不知道你是否是人?沒有太多機器人運行啓用了GM的Firefox,無論是。 – 2012-03-24 01:17:49

+0

我爲論壇提供了一個腳本,該論壇在內容頁面中沒有提供回覆表單。用戶必須轉到其他頁面才能回覆帖子。當然,需要回復才能回覆。 – 2012-03-24 02:24:15

回答

1

location.assign()加載新頁面; 「哄騙」掉腳本和任何變量,如Recaptcha

在這種情況下,請繼續並使用unsafeWindow。除非你知道網站管理員的目標是Greasemonkey腳本,否則這並不是什麼大事。

在這種情況下更危險,因爲正在添加recaptcha代碼。目標頁面不是。


更新:
的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"});'); 
+0

實際上,我想讓我的腳本可用於chrome而不使用篡改猴子等附加支持,沒有它,chrome不能運行unsafeWindow。 – 2012-03-24 02:19:47

+0

如果您想讓Chrome兼容,請在問題中說出這樣的內容!查看更新後的答案。 – 2012-03-24 04:50:47

+0

好吧,它的工作原理。只是需要延遲。 – 2012-03-30 13:12:24