“We are implementing a new extension API, called WebExtensions—largely compatible with the model used by Chrome and Opera—to make it easier to develop extensions across multiple browsers.”
      
      
      
      
    {
  "manifest_version": 2,
  "name": "David Blaine's Cool Extension",
  "version": "1.0",
  "description": "Literally MAGIC",
  "icons": {
    "48": "/icon.svg"
  }
}
    const { tabs, browserAction } = browser.browserAction;
browserAction.onClicked.addListener(async function() {
  let tab = await tabs.create({
    url:"https://example.org"
  });
  let heading = await tabs.executeScript(tab.id, {
    code: `document.querySelector('h1').textContent;`
  });
});
    "background": {
  "scripts": ["polyfill.js", "my-background.js"]
}
// or...
"background": {
  "page": "my-background.html"
}
    <html>
  <head>
    <script src="polyfill.js"></script>
    <script src="my-background.js"></script>
  </head>
</html>
    <div class="something useful"></div>
<script src="polyfill.js"></script>
<script src="dom-library.js"></script>
<script type="module" src="my-background.js"></script>
    chrome.*
        browser.*
        browser.*
(Promises)
        browser.*
(Promises)
        
    
      
      // Safari
safari.self.browserWindow.openTab();
// Elsewhere
browser.tabs.create();
    npm i -g web-ext