custom-browser-polyfill.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /* global navigator, chrome */
  2. (() => {
  3. const isChrome = navigator.userAgent.includes("Chrome");
  4. if (isChrome) {
  5. this.browser = {
  6. browserAction: {
  7. onClicked: {
  8. addListener: listener => chrome.browserAction.onClicked.addListener(listener)
  9. },
  10. enable: tabId => chrome.browserAction.enable(tabId),
  11. disable: tabId => chrome.browserAction.disable(tabId),
  12. setBadgeText: options => new Promise((resolve, reject) => {
  13. if (chrome.runtime.lastError) {
  14. reject(chrome.runtime.lastError);
  15. } else {
  16. chrome.browserAction.setBadgeText(options, resolve);
  17. }
  18. }),
  19. setBadgeBackgroundColor: options => new Promise((resolve, reject) => {
  20. if (chrome.runtime.lastError) {
  21. reject(chrome.runtime.lastError);
  22. } else {
  23. chrome.browserAction.setBadgeBackgroundColor(options, resolve);
  24. }
  25. }),
  26. setTitle: options => new Promise((resolve, reject) => {
  27. if (chrome.runtime.lastError) {
  28. reject(chrome.runtime.lastError);
  29. } else {
  30. chrome.browserAction.setTitle(options, resolve);
  31. }
  32. }),
  33. setIcon: options => new Promise((resolve, reject) => {
  34. if (chrome.runtime.lastError) {
  35. reject(chrome.runtime.lastError);
  36. } else {
  37. chrome.browserAction.setIcon(options, resolve);
  38. }
  39. })
  40. },
  41. menus: {
  42. onClicked: {
  43. addListener: listener => chrome.contextMenus.onClicked.addListener(listener)
  44. },
  45. create: options => chrome.contextMenus.create(options),
  46. removeAll: () => new Promise((resolve, reject) => {
  47. chrome.contextMenus.removeAll(() => {
  48. if (chrome.runtime.lastError) {
  49. reject(chrome.runtime.lastError);
  50. } else {
  51. resolve();
  52. }
  53. });
  54. })
  55. },
  56. runtime: {
  57. onMessage: {
  58. addListener: listener => chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  59. const response = listener(message, sender);
  60. if (response && typeof response.then == "function") {
  61. response.then(sendResponse);
  62. return true;
  63. }
  64. }),
  65. removeListener: () => { }
  66. },
  67. sendMessage: message => new Promise((resolve, reject) =>
  68. chrome.runtime.sendMessage(message, response => {
  69. if (chrome.runtime.lastError) {
  70. reject(chrome.runtime.lastError);
  71. } else {
  72. resolve(response);
  73. }
  74. })
  75. ),
  76. getBackgroundPage: () => new Promise((resolve, reject) =>
  77. chrome.runtime.getBackgroundPage(bgPage => {
  78. if (chrome.runtime.lastError) {
  79. reject(chrome.runtime.lastError);
  80. } else {
  81. resolve(bgPage);
  82. }
  83. })
  84. ),
  85. onInstalled: {
  86. addListener: listener => chrome.runtime.onInstalled.addListener(listener)
  87. },
  88. get lastError() {
  89. return chrome.runtime.last;
  90. }
  91. },
  92. storage: {
  93. local: {
  94. set: value => new Promise((resolve, reject) => {
  95. chrome.storage.local.set(value, () => {
  96. if (chrome.runtime.lastError) {
  97. reject(chrome.runtime.lastError);
  98. } else {
  99. resolve();
  100. }
  101. });
  102. }),
  103. get: () => new Promise((resolve, reject) => {
  104. chrome.storage.local.get(value => {
  105. if (chrome.runtime.lastError) {
  106. reject(chrome.runtime.lastError);
  107. } else {
  108. resolve(value);
  109. }
  110. });
  111. }),
  112. clear: () => new Promise((resolve, reject) => {
  113. chrome.storage.local.clear(() => {
  114. if (chrome.runtime.lastError) {
  115. reject(chrome.runtime.lastError);
  116. } else {
  117. resolve();
  118. }
  119. });
  120. })
  121. }
  122. },
  123. tabs: {
  124. onCreated: {
  125. addListener: listener => chrome.tabs.onCreated.addListener(listener)
  126. },
  127. onActivated: {
  128. addListener: listener => chrome.tabs.onActivated.addListener(listener)
  129. },
  130. onUpdated: {
  131. addListener: listener => chrome.tabs.onUpdated.addListener(listener)
  132. },
  133. onRemoved: {
  134. addListener: listener => chrome.tabs.onRemoved.addListener(listener)
  135. },
  136. sendMessage: (tabId, message) => new Promise((resolve, reject) =>
  137. chrome.tabs.sendMessage(tabId, message, response => {
  138. if (chrome.runtime.lastError) {
  139. reject(chrome.runtime.lastError);
  140. } else {
  141. resolve(response);
  142. }
  143. })
  144. ),
  145. query: options => new Promise((resolve, reject) => {
  146. chrome.tabs.query(options, tabs => {
  147. if (chrome.runtime.lastError) {
  148. reject(chrome.runtime.lastError);
  149. } else {
  150. resolve(tabs);
  151. }
  152. });
  153. }),
  154. get: options => new Promise((resolve, reject) => {
  155. chrome.tabs.get(options, tab => {
  156. if (chrome.runtime.lastError) {
  157. reject(chrome.runtime.lastError);
  158. } else {
  159. resolve(tab);
  160. }
  161. });
  162. })
  163. }
  164. };
  165. }
  166. })();