我目前的項目是一個谷歌瀏覽器擴展程序,它應該可以在網頁上自動執行一個程序。我迄今爲止的做法是,擴展程序在一個單獨的選項卡中打開,並且對於該過程中的各個步驟,您有幾個單獨的按鈕。您在另一個選項卡中打開網頁,然後單擊擴展選項卡上的按鈕1並等待它完成。然後你繼續點擊下一頁,等待它加載,然後在按鈕2上手動等...如何告訴後臺腳本等待頁面加載?
我現在正在自動化整個過程,並且在網頁上查找DOM元素JQuery和.click() - 他們繼續,但我的擴展腳本在網頁處理和加載之前保持運行,導致整個過程失敗。我意識到我需要一個針對我的問題的異步解決方案,但我找不到一個解決方案。
有沒有一種方法可以讓我檢查.click()之後的頁面是否完成加載,並在繼續執行腳本或類似的方法來自動執行此過程之前?
編輯,澄清代碼:
在主擴展後臺腳本:
function readPage1 (tabUrl) {
chrome.tabs.query({
'url': <tabUrl>
}, function (tabs) {
if (tabs.length > 0) {
chrome.tabs.sendMessage(tabs[0].id, {
'action': 'verifyEmails1'
}, function (response) {
<-- logic here -->
});
}
});
}
function readPage2 (tabUrl) {
chrome.tabs.query({
'url': <tabUrl>
}, function (tabs) {
if (tabs.length > 0) {
chrome.tabs.sendMessage(tabs[0].id, {
'action': 'verifyEmails2'
}, function (response) {
<-- logic here -->
});
}
});
}
在單獨的腳本,所有選項上運行:
chrome.extension.onMessage.addListener(function (request, sender, sendResponse) {
'use strict';
if (request.action === 'verifyEmails1') {
<-- first page reading/populating logic -->
$('.next a')[0].click();
sendResponse(response);
} else if (request.action === 'verifyEmails2') {
<-- second page reading logic -->
sendResponse(response);
}
});
現在,我有兩個按鈕,調用readPage1
和readPage2
,我手動等待第二頁完成加載,然後再按第二個按鈕。在異步繼續readPage2
之前,如何等待標籤在$('.next a')[0].click();
之後加載? (或者,更有可能我會加劇兩種反應到一個響應對象和處理這一切在ReadPage1
)
這取決於單擊該按鈕後,該網頁上到底發生了什麼。你能詳細說明嗎? – wOxxOm
第一頁讀取先前輸入的電子郵件列表,然後單擊按鈕將您重定向到第二頁,顯示第二個未通過服務器測試的電子郵件列表。我應該閱讀該列表並在我的程序中進一步使用它(我已經從加載的頁面處理它)。 –
如果您想捕捉第二個選項卡重定向到新URL的時刻,請在後臺附加[chrome.tabs.onUpdated](https://developer.chrome.com/extensions/tabs#event-onUpdated)偵聽器腳本。如果您需要更詳細的幫助,請將您使用的代碼添加到問題中。 – wOxxOm