Chrome扩展程序:如何从后台页面了解标签何时完成加载

Omi*_*iod 43 google-chrome

我在后台页面中使用监听器来了解加载选项卡的时间:

chrome.tabs.onUpdated.addListener(function (tabId) { })
Run Code Online (Sandbox Code Playgroud)

但是监听器被解雇了两次:当页面开始加载时,以及页面何时完成.是否有办法区分这两种情况?

Omi*_*iod 82

幸运的是找到了解决方案.

还有一个附加参数保存状态值:

chrome.tabs.onUpdated.addListener(function (tabId , info) {
  if (info.status === 'complete') {
    // your code ...
  }
});
Run Code Online (Sandbox Code Playgroud)

状态可以是loadingcomplete.

  • PS注意,这对于后台脚本很有用。对于内容脚本,只需使用`window.onready`。 (2认同)
  • @PeterEhrlich Window.onready 的问题是它在 init DOM 加载后立即启动。如果您尝试使用像 gmail 这样不断获取数据的网站,它会立即触发。 (2认同)

Cha*_*ira 11

打开选项卡后,我想要一种更简单的方法

function createTab (url) {
    return new Promise(resolve => {
        chrome.tabs.create({url}, async tab => {
            chrome.tabs.onUpdated.addListener(function listener (tabId, info) {
                if (info.status === 'complete' && tabId === tab.id) {
                    chrome.tabs.onUpdated.removeListener(listener);
                    resolve(tab);
                }
            });
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

所以它会

let tab = await createTab('http://google.com');
Run Code Online (Sandbox Code Playgroud)