0

我对 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!不仅如此,我还需要将当前窗口导航到注销页面......或者至少刷新它。有人可以帮忙吗?

-罗文 RJ

PS 早些时候我尝试保存我打开的 Dropbox URL 的窗口引用,但我无法将窗口引用保存到 appAPI.db,所以我改变了技术。帮助!

4

1 回答 1

1

一般来说,您对 Crossrider API 的使用看起来不错。

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

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

背景.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 的员工

于 2013-11-26T08:16:09.687 回答