簡體   English   中英

document.getElementById不返回null,但也沒有做我想要的。 在javascript控制台中沒有錯誤

[英]document.getElementById does not return null, but also does not do what I want. No error in javascript console

在這個例子中,我加載了一個paypal頁面,其中提示我登錄。 一旦我登錄,頁面就會改變,通過在paypal結束時使用其他javascripts。 地址在此轉換時不會改變,源代碼也不會以任何實質方式改變。 我試圖找到一種方法讓我的腳本在第一次單擊后等待足夠長時間才能獲得加載后的元素。 我想我可以使用以下方法做到這一點相當簡單:

document.getElementById("submitLogin").click();

window.onload = function() {
    document.getElementById("continue").click();
}; 

執行腳本時,單擊第一個按鈕,頁面轉換,但不會單擊加載的第二個按鈕。 我的javascript控制台沒有報告任何錯誤,表明它能夠“獲取”該元素。 不知道為什么它不會點擊它。

如果沒有別的,你總是可以在某個時間間隔內輪詢“continue”元素的存在:

function clickContinue() {
    var button = document.getElementById("continue");
    return button ? button.click() : setTimeout(clickContinue, 100);
}

document.getElementById("submitLogin").click();
clickContinue();

如果你走這條路線,你可能想要包含一個故障安全,所以它不會運行太長時間,以防萬一發生意外。 這樣的事情應該有效:

clickContinue.interval = 100; // Look for "continue" button every 0.1 second
clickContinue.ttl = 10000; // Approximate time to live: 10 seconds ~ 10,000 ms
clickContinue.tries = clickContinue.ttl / clickContinue.interval | 0;

function clickContinue() {
    var button = document.getElementById("continue"),
        interval = clickContinue.interval;
    return button ? button.click() : 
        clickContinue.tries-- && setTimeout(clickContinue, interval);
}
// ...

看看PayPal的API文檔,看看它們是否提供了一種設置回調來處理這個問題的方法。 這種輪詢技術應該只能作為最后的手段使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM