chrome extension onInstalled event

后端 未结 3 1326
别那么骄傲
别那么骄傲 2021-01-02 03:08

I have a question about chrome extension install/update event. If I add the onInstalled event listener in a top level code in the background script, is there a time frame in

相关标签:
3条回答
  • 2021-01-02 03:40

    I needed to figure this out too. While I didn't find anything authoritative, I did throw a couple of console.time() statements in my background script.

    Code was something like this:

    console.time('onInstall event');
    console.time('first function');
    
    chrome.runtime.onInstalled.addListener(details => {
      console.timeEnd('onInstall event');
    });
    
    // 7 module imports
    
    someSyncFunction() // console.timeEnd('first function') is called in the first line in this function
    

    Then I just loaded/reloaded the extension (unpacked, in dev mode) a few times. onInstall seems to pretty reliably fire within the first 50ms, while the first function happens w/in the first ms. Here are the results:

    (First function, onInstall event)
    (.282ms, 47.2ms)
    (.331ms, 45.3ms)
    (.327ms, 49.1ms)
    (.294ms, 45.9ms)
    
    0 讨论(0)
  • 2021-01-02 03:52

    onInstalled listeners catch events in these situations:

    when the extension is first installed, when the extension is updated to a new version, and when Chrome is updated to a new version.

    Since this is all asynchronous it will happen in the background, and according the documentation, fires immediately at any of these situations. Review asynchronous programming for some clarity on this.

    link to documentation

    According to your question it seems like you want help executing code in the right order. This answer provides a helpful framework for your case (using the reason attribute).

    chrome.runtime.onInstalled.addListener(function(details){
        if(details.reason == "install"){
            //call a function to handle a first install
        }else if(details.reason == "update"){
            //call a function to handle an update
        }
    });
    
    0 讨论(0)
  • 2021-01-02 03:59

    Given that the document says

    “Listeners must be registered synchronously from the start of the page.”

    and

    “Do not register listeners asynchronously, as they will not be properly triggered.”

    , it seems they guarantee every synchronously-attached listener not to miss any, no matter how long it takes to evaluate your code. And this would be done by Chrome firing events after evaluating your entire code.

    My hypothesis is that onInstalled actually works like onInitialized. No test data, though.

    0 讨论(0)
提交回复
热议问题