tabs.js 996 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { noop } from '#/common';
  2. import { isFirefox, isAndroid } from '#/common/ua';
  3. const openers = {};
  4. browser.tabs.onRemoved.addListener((id) => {
  5. const openerId = openers[id];
  6. if (openerId) {
  7. browser.tabs.sendMessage(openerId, {
  8. cmd: 'TabClosed',
  9. data: id,
  10. })
  11. .catch(noop);
  12. delete openers[id];
  13. }
  14. });
  15. export function tabOpen(data, src) {
  16. const { url, active } = data;
  17. const srcTab = src.tab || {};
  18. const options = {
  19. url,
  20. active,
  21. windowId: srcTab.windowId,
  22. index: srcTab.index + 1,
  23. };
  24. // Firefox Android does not support `openerTabId` field, it fails if this field is passed
  25. if (!isFirefox || !isAndroid) {
  26. options.openerTabId = srcTab.id;
  27. }
  28. return browser.tabs.create(options)
  29. .then((tab) => {
  30. const { id } = tab;
  31. openers[id] = srcTab.id;
  32. return { id };
  33. });
  34. }
  35. export function tabClose(data, src) {
  36. const tabId = (data && data.id) || (src.tab && src.tab.id);
  37. if (tabId) browser.tabs.remove(tabId);
  38. }