Robert
Robert

Reputation: 1710

How to detect if Chrome tab is crashed

I'm writing a extension for logging usage of Facebook. I found that even if the facebook tab crashed the timer still counting so trying to fix it. According to the doc, there seems no such event.

Is there API for detecting if the tab is crashed, or crash event?

Upvotes: 10

Views: 4215

Answers (2)

mstephano
mstephano

Reputation: 11

This is how I managed to detect a page crash in my chrome extension:

  • have the background script send "check" message to the content script at an interval, and the content script must return an answer.
  • if the page crashed, the response back to background script will be undefined, then do what you need to do. In my case, refresh the page.
content_script:
...
chrome.runtime.onMessage.addListener(function(msg, sender, sendResponse) {
    if (msg.action == 'page_check') {
        sendResponse('OK');
    }
});
background.js:
...
setInterval(() => {
  chrome.tabs.query({ url: `http://<your_page_defined_in_manifest>` }, function (tabs) {
    if (tabs.length > 0) {
      chrome.tabs.sendMessage(tabs[0].id, { action: "page_check" }, function (response) {
        if (!response) {
          chrome.tabs.reload(tabs[0].id);
        }
      });
    }
  });
}, 60000); //every minute

Upvotes: 1

Rob W
Rob W

Reputation: 349142

The chrome.processes.onExited event is triggered when a renderer crashes (which is a process that hosts one or more tabs).

This API is only available to users on the developer channel, so if you want to make the extension widely available for everyone, then you need to use an alternative method. You could create a content script that creates a message port via chrome.runtime.connect, and in the onDisconnect event use chrome.tabs.sendMessage or chrome.tabs.executeScript to check whether the tab is still alive: If the tab does not exist any more, then chrome.runtime.lastError will be set and indicate a communication error.

Upvotes: 6

Related Questions