第一次创建 Chrome 扩展程序,发现它有点不知所措。
我正在尝试创建一个插件来从网站中提取评论数据并将其存储在文本文件中。我希望能够单击插件按钮开始下载,然后插件应该使用页面上提供的Next Review按钮导航到网站上的每个评论,直到它到达最后一个评论。
每个页面都需要一些时间来加载,所以我需要等待页面加载,然后才能调用提取信息并导致页面前进的函数。
我最初尝试使用计时器,但这显然会导致跨系统的行为不一致,因此我现在尝试使用chrome.webNavigation
/ chrome.tabs
API。
这是我面临问题的地方。如果我使用页面中的链接导航到另一个页面,也chrome.webNavigation.onDOMContentLoaded
不会被解雇。chrome.webNavigation.onCompleted
只有当我通过手动输入 url 导航到页面或重新加载页面时,它们才会被触发。
所以我尝试使用该chrome.tabs.onUpdated
事件。这成功地识别出我点击了一个链接,但它在我点击按钮的那一刻被触发。它不会等待 DOM 内容加载。我需要一种方法来延迟这个(不使用计时器),以便它在页面内容加载后触发
这是我的背景脚本的摘录:
chrome.webNavigation.onDOMContentLoaded.addListener((tab) => {
if (tab.frameId === 0)
console.log("webNavigation DOMContentLoaded")
})
chrome.webNavigation.onCompleted.addListener((tab) => {
if (tab.frameId === 0)
console.log("webNavigation Content Loaded")
})
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
let msg = {
txt : "ContentLoaded"
}
if (changeInfo.status == 'complete' && tab.status == 'complete') {
console.log('tabs ContentLoaded')
chrome.tabs.sendMessage(tab.id, msg)
}
})
我可能对此的解释不正确,但我的印象是当页面完成加载时 TabStatus (changeInfo.status) 会显示“完成”(有点像“加载”事件)。显然,这不会发生。如果有人也可以解释它的实际工作原理,那就太好了。
所以,总结一下:我需要一种方法让 Chrome 插件意识到我已经使用链接导航到另一个页面,并且它应该仅在页面内容加载完成时触发一个事件。