2012-09-07 25 views
2

我創建了一個GreaseMonkey腳本,只要用戶在瀏覽器中保存了他們的用戶名和密碼,它就會自動登錄到頁面。這很簡單,只是檢查以確保用戶名字段和密碼字段不是空白的,然後它自動點擊登錄按鈕。WIll window.addEventListener(「load」,function(),false);等待字段被瀏覽器自動填充?

我偶爾碰到一個問題,它沒有登錄。加載的頁面只是坐在那裏。我認爲這只是由於在完成用戶名和密碼字段的檢查時頁面未完全加載。

因此,我將此添加到我的腳本中。

window.addEventListener("load", Login(), false); 

我的問題是...請問這其實等待瀏覽器嘗試登錄前自動填充這些字段或頁面加載和瀏覽器填充這些領域的2個不同的行動?

回答

0

因爲是自動保存的形式如何工作沒有標準,我會成立一個計時器上setTimeout()

呃..我是啞巴。當前代碼嘗試輸入其用戶信息時會造成不好的結果。

未經測試,快速編寫的代碼:

function logMeIn() { 
    var el = document.getElementById("username"); 
    if (el && el.value !== "") { 
    // Finish the login 
    } else { 
    window.setTimeout(logMeIn, 200); 
    } 
} 

logMeIn(); 

嘗試2:

// This is a User Script -- runs in its own encloser, won't pollute names back to the main document. 
var loginTimer; 

function logMeIn() { 
    var el = document.getElementById("username"); 
    if (el && el.value !== "") { 
    // Finish the login 
    } else { 
    loginTimer = window.setTimeout(logMeIn, 200); 
    } 
} 

logMeIn(); 

// can't use ".onfocus" -- its a userscript. 
// Cancel the timer if the username field gets focus -- if the user tries to enter things. 
document.getElementById("username").addEventListner("focus") = function(e) { 
    if (loginTimer) { 
    window.clearTimeout(loginTimer); 
    } 
} 
+0

我一直在討論這樣做,但如果由於某種原因用戶忘記在瀏覽器中保存他們的用戶名和密碼會怎麼樣。這不會創建一個鎖定瀏覽器的無限循環嗎? – RandomPrecision

+0

@RandomPrecision - 由於setTimeout的原因,它不會鎖定瀏覽器。它可能會在頁面上消失幾個週期,但假設你不是永遠坐在那頁上,那應該不會太糟糕。如果您擔心通過移動設備的資源燒燬,您可以放入櫃檯並只檢查X次。當文檔失去焦點時,您也可以禁用代碼。爲了簡單起見,我放棄了這些東西。 –

+0

謝謝你的解釋和代碼。這將工作。謝謝。 – RandomPrecision

1

您是不是要參考Login而不是立即執行它?

window.addEventListener("load", Login, false); 

你的方式執行窗口加載Login以前

+0

好一點 - 但仍然留下了事件處理的順序迴旋餘地。它確實似乎有足夠多的時間來瀏覽器時代自動填充表單。 –

+0

嗯..我以爲window.addEventListener(「加載」,登錄(),假);將等待頁面加載,然後運行指定的功能。 – RandomPrecision

+0

@RandomPrecision - 'Login()'將運行該函數,然後返回一個值。 'Login'是一個函數引用,將在稍後調用。 –