Закрыть окно Chrome после замены oAuth - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть код, который открывает окно

let mywindow = window.open("utl", "title", "resizable=yes,width=600,height=400,toolbar=no,titlebar=no,menubar=no,scrollbars=yes");

Я хочу получить доступ к текущему URL-адресу окна, я попытался:

  • window.location
  • window.document.url

Каждая попытка возвращает:

Uncaught DOMException: заблокирован фрейм с источником "https://mail.google.com" от доступа к кросс-источникуframe. at eval (eval at (расширение chrome: //dapaeellgmlagjcopljjcfiadalafdil/extension.js: 57053: 21), : 1: 10) при расширении chrome: //dapaeellgmlagjcopljjcfiadalafdil/extension.j: 5: 21: 5: 21: 5: 211018 *

Я делаю обмен токенами oAuth, когда окно достигает URI перенаправления, мне нужно, чтобы окно закрывалось автоматически.

Какими способами я могу этого достичь?

1 Ответ

2 голосов
/ 25 сентября 2019

Вы можете сделать это с помощью API chrome.tabs, вот пример:

const orgURL = '<URL>';
chrome.tabs.create({url: orgURL}, createdTab => {
   function updateListener(tabId, tab) => {
     if (tabId == createdTab.id && tab.url !== orgURL) {
        const redirectURL = tab.url;
        // Do something with the redirect URL
        chrome.tabs.remove(tabId); // Close the tab.
        chrome.tabs.onUpdated.removeListener(updateListener);
     }
   }
   chrome.tabs.onUpdated.addListener(updateListener);
});

Не забудьте добавить разрешение chrome.tabs в манифест.

Если вы действительно хотите сделать это, используя новое окно вместо новой вкладки в текущем окне, взгляните на chrome.windows API.

Здесьпример использования chrome.windows API:

const orgURL = "<URL>"
chrome.windows.create({ url: orgURL }, win => {
  if (win.tabs.length) {
    const firstTab = window.tabs[0];
    if (firstTab.url !== orgURL) { // the redirect already happen
       const redirectURL = window.tabs[0].url;
       // Do something with the redirect URL
    } else {// the redirect hasn't happen yet, listen for tab changes.
       function updateListener(tabId, tab) => {
         if (tabId == firstTab.id && tab.url !== orgURL) {
           const redirectURL = tab.url;
           // Do something with the redirect URL
           chrome.windows.remove(win.id); // Close the window.
           chrome.tabs.onUpdated.removeListener(updateListener);
         }
       }
       chrome.tabs.onUpdated.addListener(updateListener);
    }
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...