javascript - CHROME-LAAJENNUS: chrome.runtime.lastError ei välilehteä, jolla on tämä tunnus -virhe
Työskentelen projektin parissa, joka luo Google Chrome -laajennuksen, ja käytän siinä Chrome API:ita. Nyt yritän saada handleTabUpdate-funktiooni toimimaan, kun välilehti päivittyy. Kuitenkin saan Unchecked runtime.lastError: No tab with id: 60
Miten voin korjata sen? Tässä on koodini:
chrome.tabs.onUpdated.addListener(handleTabUpdate)
function handleTabUpdate(tabId, info) {
if (info.status === 'loading') {
store.dispatch({ type: 'RESET_TABHOSTS' })
chrome.tabs.get(tabId, (activeTab) => {
if (tabId === store.getState().currentTab['id']) {
store.dispatch({ type: 'ACTIVE_TAB', payload: activeTab })
}
})
}
}
Vastaus #1
Törmäsin juuri tähän ongelmaan MV3:ssa ja olen kehittänyt ratkaisun, joka mahdollistaa hieman helpomman työskentelyn välilehtien kanssa.
Toiminnot
const handleRuntimeError = () => {
const error = chrome.runtime.lastError;
if (error) {
throw new Error(error);
}
};
const safeGetTab = async (tabId) => {
const tab = await chrome.tabs.get(parseInt(tabId));
try {
handleRuntimeError();
return tab;
} catch (e){
console.log('safeGetTab', e.message);
}
return {};
};
Toteutus
(async () => {
// assumes some tabId
const tab = await safeGetTab(tabId);
})()
Tämä palauttaa arvon riippumatta tilanteesta. Se palauttaa joko välilehtiobjektin tai tyhjän objektin. Sitten voit tehdä skriptissäsi joitain perus tarkistuksia päättääksesi, miten haluat käsitellä sitä. Omassa tapauksessani voin yksinkertaisesti jättää huomiotta toimenpiteen, joka olisi tehty kyseiselle välilehdelle, ja jatkaa eteenpäin.
Vastaus #2
Arvaukseni on, että välilehti, jota etsit, suljettiin, joten kun yrität saada sitä id-tunnuksella, toiminto epäonnistuu.
Virheen välttämiseksi ehdotukseni on ensin kysyä kaikki välilehdet ja katsoa, löytyykö tietty id tuloksista. Jos löytyy, suorita chrome.tabs.get() ja käytä logiikkaasi.
