Поиск окна и переход к URL-адресу с помощью Crossrider

Я новичок в Javascript и Crossrider. Я считаю, что я пытаюсь сделать довольно простую вещь - может быть, я что-то здесь упустил?

Я пишу расширение, которое автоматически регистрирует вас в Dropbox, а позже выполнит выход из него. Я могу автоматически регистрировать пользователя в Dropbox, но теперь мой клиент хочет, чтобы я автоматически выводил этих людей из Dropbox, ПОИСК открытых окон Dropbox и выход каждого из них из системы.

Он говорит, что видел это, и это возможно.

По сути, мне нужен код, который позволяет мне получить активные вкладки и установить location.href этих вкладок. Или даже закрыть их. Пока это то, что я получил:

//фон.js:

appAPI.ready (функция ($) {

// Initiate background timer
backgroundTimer();

// Function to run backround task every minute
function backgroundTimer() {

    if (appAPI.db.get('logout') == true)
    {
        // retrieves the array of tabs
        appAPI.tabs.getAllTabs(function(allTabInfo) 
        {

            // loop through tabs
            for (var i=0; i<allTabInfo.length; i++) 
            {
                //is this dropbox?
                if (allTabInfo[i].tabUrl.indexOf('www.dropbox.com')!=-1)
                {
                    appAPI.tabs.setActive(allTabInfo[i].tabId);

                                    //gives me something like chrome-extension://...
                    window.alert(window.location.href);

                                    //code below doesn't work
                    //window.location.href = 'https://www.dropbox.com/logout';

                }

            }
            appAPI.db.set('logout',false);
        });
        window.alert('logged out.');
    }


    setTimeout(function() {
        backgroundTimer();
    }, 10 * 1000);
}

});

Когда я делаю appAPI.tabs.setActive(allTabInfo[i].tabId); а затем window.alert(window.location.href); Я получаю адрес "chrome-extension://xxx" - я считаю, что это адрес моего расширения, что совершенно не то, что мне нужно, а скорее URL-адрес активного окна! Более того, мне нужно перейти из текущего окна на страницу выхода... или хотя бы обновить ее. Кто-нибудь может помочь, пожалуйста?

- Роуэн Р. Дж.

P.S. Ранее я пытался сохранить ссылку на окно открытого URL-адреса Dropbox, но не смог сохранить ссылку на окно в appAPI.db, поэтому я изменил метод. Помощь!


person Rowan    schedule 25.11.2013    source источник


Ответы (1)


В целом, ваше использование API Crossrider выглядит хорошо.

Проблема в том, что вы пытаетесь использовать window.location.href для получения адреса активной вкладки. Однако в фоновой области объект окно относится к фоновой странице/вкладке, а не к активной вкладке; следовательно, вы получаете URL фоновой страницы. [Примечание: области действия не могут напрямую взаимодействовать друг с другом]

Поскольку ваша цель — изменить/закрыть URL-адрес активной вкладки Dropbox, вы можете добиться этого, используя обмен сообщениями между областями. Итак, в вашем примере вы можете отправить сообщение из фоновой области в область страницы расширения с запросом на выход из системы. Например (и я взял на себя смелость упростить код):

background.js:

appAPI.ready(function($) {
  appAPI.setInterval(function() {
    if (appAPI.db.get('logout')) {
      appAPI.tabs.getAllTabs(function(allTabInfo) {
        for (var i=0; i<allTabInfo.length; i++) {
          if (allTabInfo[i].tabUrl.indexOf('www.dropbox.com')!=-1) {
            // Send a message to all tabs using tabId as an identifier
            appAPI.message.toAllTabs({
              action: 'logout',
              tabId: allTabInfo[i].tabId
            });
          }
        }
        appAPI.db.set('logout',false);
      });
    }
  }, 10 * 1000);
});

расширение.js:

appAPI.ready(function($) {
  // Listen for messsages
  appAPI.message.addListener(function(msg) {
    // Logout if the tab ids match
    if (msg.action === 'logout' && msg.tabId === appAPI.getTabId()) {
      // change URL or close code
    }
  });
});

Отказ от ответственности: я сотрудник Crossrider

person Shlomo    schedule 26.11.2013