2012-11-23 19 views
1

我正在嘗試編寫一個在您允許查看成熟遊戲內容之前自動執行Steam存儲時間檢查的greasemonkey腳本。Greasemonkey腳本由於重定向而提交表單後暫停執行

我的問題是,在表單提交後,網站會自動重定向到新的頁面,和的Greasemonkey腳本的其餘部分沒有得到執行的機會:

// ==UserScript== 
// @name  agecheck 
// @include  http://store.steampowered.com/agecheck/* 
// @version  1.17 
// @modified 11/23/2012 
// @grant  GM_xmlhttpRequest 
// ==/UserScript== 

//Mini script for doing steam age checks automatically (used when scraping steam sites) 
if (/agecheck/i.test (location.pathname)) { 
    var ageForm = document.querySelector ("#agegate_box form"); 
    ageForm.querySelector ("[name='ageDay']").value  = 18; 
    ageForm.querySelector ("[name='ageMonth']").value = 'August'; 
    ageForm.querySelector ("[name='ageYear']").value = 1987; 
    ageForm.submit(); 
    setTimeout(function(){ window.close(); }, 10000); //Never gets to run 
} 

要驗證碼是有效的,如果我只是註釋掉ageForm.submit();聲明,那麼標籤會在10秒後按要求關閉。

如何在提交表單後關閉窗口?

回答

1

您可以創建一個隱形iframe並將表單的目標屬性指向該iframe。因此頁面位置不會改變。一個例子是this的問題。

如果你想要一個純粹的JS解決方案,你可以檢查this的問題,因爲它解釋瞭如何添加一個回調submit()方法。

1

我用它加載在一個隱藏幀表單提交的結果,而不是允許的形式改變當前窗口的位置(這是暫停的Greasemonkey腳本)下面的代碼解決了這個問題:

if (/agecheck/i.test (location.pathname)) { 
    var ageForm = document.querySelector ("#agegate_box form"); 
    ageForm.querySelector ("[name='ageDay']").value  = 18; 
    ageForm.querySelector ("[name='ageMonth']").value = 'August'; 
    ageForm.querySelector ("[name='ageYear']").value = 1987; 

    var newFrame = document.createElement('frame'); 
    newFrame.name = "PostResult" 
    document.body.appendChild(newFrame); 
    ageForm.target = newFrame.name; 

    ageForm.submit(); 
    setTimeout(function(){ window.close(); }, 10000); 
} 

感謝G. Kayaalp的提示。

+0

不客氣:) – 2012-11-24 07:47:58