2013-11-25 25 views
0

我對Javascript和Crossrider比較陌生。我相信我想要做的是一件相當簡單的事情 - 也許我在這裏錯過了什麼?查找窗口並使用Crossrider導航到URL

我正在寫一個擴展程序,它會自動將您登錄到Dropbox中,並在稍後將您註銷。我可以自動將用戶登錄到Dropbox,但現在我的客戶希望我自動將這些人從Dropbox中註銷到FINDING打開的Dropbox窗口並將其中的每一個都記錄下來。

他說他看到了它,這是可能的。

基本上我想要的是一些代碼,它允許我獲得活動標籤,並設置這些標籤的location.href。甚至關閉它們。到目前爲止,這是我得到:

//background.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!除此之外,我需要將當前窗口導航到註銷頁面......或者至少刷新它。有人可以幫忙嗎?

-Rowan R.J.

P.S. 之前我嘗試保存我打開的保管箱URL的窗口引用,但我無法將窗口引用保存到appAPI.db中,因此我更改了技巧。幫幫我!

回答

1

通常,您使用Crossrider API看起來不錯。

這裏的問題是,您正嘗試使用window.location.href來獲取活動選項卡的地址。但是,在後臺範圍中,對象窗口對象涉及背景頁面/選項卡,而不是活動選項卡;因此您會收到後臺頁面的網址。 [注意:示波器不能直接與其他對象交互]

由於您的目標是更改/關閉活動的保管箱選項卡的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員工