我是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中,所以我改变了技术。救命啊!
答案 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员工