查找窗口并使用Crossrider导航到URL

时间:2013-11-25 19:29:31

标签: javascript tabs crossrider

我是Javascript和Crossrider的新手。我相信我想做的事情是一件相当简单的事情 - 也许我在这里错过了什么?

我正在编写一个扩展程序,会自动将您登录到Dropbox,稍后会将您注销。我可以自动将用户登录到Dropbox,但现在我的客户希望我通过查找打开的Dropbox窗口自动将这些人从Dropbox中记录下来,并将每个人记录下来。

他说他已经看到了它,这是可能的。

基本上我想要的是一些允许我获取活动标签的代码,并设置这些标签的location.href。甚至关闭它们。到目前为止,这就是我得到的:

// background.js:

appAPI.ready(function($){

// 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!更重要的是,我需要将当前窗口导航到注销页面......或者至少刷新它。请帮忙吗?

-Rowan R. J。

P.S。 之前我尝试保存我打开的Dropbox URL的窗口引用,但是我无法将窗口引用保存到appAPI.db中,所以我改变了技术。救命啊!

1 个答案:

答案 0 :(得分:1)

通常,您对Crossrider API的使用看起来很不错。

这里的问题是您尝试使用 window.location.href 来获取活动选项卡的地址。但是,在后台范围中,窗口对象与后台页面/选项卡相关,而不是活动选项卡;因此,您会收到背景页面的URL。 [注意:范围不能直接与对方交互对象]

由于您的目标是更改/关闭活动收件箱选项卡的URL,因此您可以使用范围之间的消息传递来实现此目的。因此,在您的示例中,您可以send a message从后台范围到扩展页范围,并请求注销。例如(我已经自由地简化了代码):

<强> 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);
});

<强> extension.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员工