Index: chrome/ext/background.js |
diff --git a/chrome/ext/background.js b/chrome/ext/background.js |
index 1e3753ab985cd10ebe6561d6283b1469aa4e2994..63a4463c985026024db47668a4c3bb4413b976d6 100644 |
--- a/chrome/ext/background.js |
+++ b/chrome/ext/background.js |
@@ -21,7 +21,7 @@ |
var Page = ext.Page = function(tab) |
{ |
- this._id = tab.id; |
+ this.id = tab.id; |
this._url = tab.url && new URL(tab.url); |
this.browserAction = new BrowserAction(tab.id); |
@@ -38,7 +38,7 @@ |
// but sometimes we only have the tab id when we create a Page object. |
// In that case we get the url from top frame of the tab, recorded by |
// the onBeforeRequest handler. |
- var frames = framesOfTabs[this._id]; |
+ var frames = framesOfTabs[this.id]; |
if (frames) |
{ |
var frame = frames[0]; |
@@ -48,35 +48,41 @@ |
}, |
sendMessage: function(message, responseCallback) |
{ |
- chrome.tabs.sendMessage(this._id, message, responseCallback); |
+ chrome.tabs.sendMessage(this.id, message, responseCallback); |
} |
}; |
- ext._getPage = function(id) |
+ ext.getPage = function(id) |
{ |
return new Page({id: parseInt(id, 10)}); |
}; |
- ext.pages = { |
- open: function(url, callback) |
+ function afterTabLoaded(callback, getTab) |
+ { |
+ if (callback) |
{ |
- if (callback) |
+ return function(openedTab) |
{ |
- chrome.tabs.create({url: url}, function(openedTab) |
+ if (getTab) |
+ openedTab = getTab(openedTab); |
+ |
+ var onUpdated = function(tabId, changeInfo, tab) |
{ |
- var onUpdated = function(tabId, changeInfo, tab) |
+ if (tabId == openedTab.id && changeInfo.status == "complete") |
{ |
- if (tabId == openedTab.id && changeInfo.status == "complete") |
- { |
- chrome.tabs.onUpdated.removeListener(onUpdated); |
- callback(new Page(tab)); |
- } |
- }; |
- chrome.tabs.onUpdated.addListener(onUpdated); |
- }); |
- } |
- else |
- chrome.tabs.create({url: url}); |
+ chrome.tabs.onUpdated.removeListener(onUpdated); |
+ callback(new Page(openedTab)); |
+ } |
+ }; |
+ chrome.tabs.onUpdated.addListener(onUpdated); |
+ }; |
+ } |
+ } |
+ |
+ ext.pages = { |
+ open: function(url, callback) |
+ { |
+ chrome.tabs.create({url: url}, afterTabLoaded(callback)); |
}, |
query: function(info, callback) |
{ |
@@ -100,7 +106,8 @@ |
}); |
}, |
onLoading: new ext._EventTarget(), |
- onActivated: new ext._EventTarget() |
+ onActivated: new ext._EventTarget(), |
+ onRemoved: new ext._EventTarget() |
}; |
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) |
@@ -138,6 +145,8 @@ |
function forgetTab(tabId) |
{ |
+ ext.pages.onRemoved._dispatch(tabId); |
+ |
ext._removeFromAllPageMaps(tabId); |
delete framesOfTabs[tabId]; |
} |
@@ -149,7 +158,7 @@ |
chrome.tabs.onRemoved.addListener(forgetTab); |
- chrome.tabs.onActivated.addListener(details => |
+ chrome.tabs.onActivated.addListener(function(details) |
{ |
ext.pages.onActivated._dispatch(new Page({id: details.tabId})); |
}); |
@@ -273,7 +282,7 @@ |
if (tabs.length == 0) |
return; |
- var items = contextMenuItems.get({_id: tabs[0].id}); |
+ var items = contextMenuItems.get({id: tabs[0].id}); |
if (!items) |
return; |
@@ -586,4 +595,16 @@ |
}); |
}); |
}; |
+ |
+ /* Windows */ |
+ ext.windows = { |
+ create: function(createData, callback) |
+ { |
+ function getFirstTab(createdWindow) |
+ { |
+ return createdWindow.tabs[0]; |
Sebastian Noack
2016/02/10 14:43:24
Why don't you simply pass the tab in instead of a
kzar
2016/02/11 15:20:21
Done.
|
+ } |
+ chrome.windows.create(createData, afterTabLoaded(callback, getFirstTab)); |
+ } |
+ }; |
})(); |