openURL: refactor to open/switch to URL
This commit is contained in:
parent
18a9e26668
commit
657db366c9
29
messaging.js
29
messaging.js
|
@ -140,18 +140,17 @@ function getTabRealURL(tab) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function openURL({url}) {
|
// opens a tab or activates the already opened one,
|
||||||
url = !url.includes('://') ? chrome.runtime.getURL(url) : url;
|
// reuses the New Tab page if it's focused now
|
||||||
|
function openURL({url, currentWindow = true}) {
|
||||||
|
if (!url.includes('://')) {
|
||||||
|
url = chrome.runtime.getURL(url);
|
||||||
|
}
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
chrome.tabs.query({currentWindow: true, url}, tabs => {
|
chrome.tabs.query({url, currentWindow}, tabs => {
|
||||||
// switch to an existing tab with the requested url
|
|
||||||
if (tabs.length) {
|
if (tabs.length) {
|
||||||
chrome.tabs.highlight({
|
activateTab(tabs[0]).then(resolve);
|
||||||
windowId: tabs[0].windowId,
|
|
||||||
tabs: tabs[0].index,
|
|
||||||
}, resolve);
|
|
||||||
} else {
|
} else {
|
||||||
// re-use an active new tab page
|
|
||||||
getActiveTab().then(tab =>
|
getActiveTab().then(tab =>
|
||||||
tab && tab.url == 'chrome://newtab/'
|
tab && tab.url == 'chrome://newtab/'
|
||||||
? chrome.tabs.update({url}, resolve)
|
? chrome.tabs.update({url}, resolve)
|
||||||
|
@ -163,6 +162,18 @@ function openURL({url}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function activateTab(tab) {
|
||||||
|
return Promise.all([
|
||||||
|
new Promise(resolve => {
|
||||||
|
chrome.tabs.update(tab.id, {active: true}, resolve);
|
||||||
|
}),
|
||||||
|
new Promise(resolve => {
|
||||||
|
chrome.windows.update(tab.windowId, {focused: true}, resolve);
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function stringAsRegExp(s, flags) {
|
function stringAsRegExp(s, flags) {
|
||||||
return new RegExp(s.replace(/[{}()\[\]\/\\.+?^$:=*!|]/g, '\\$&'), flags);
|
return new RegExp(s.replace(/[{}()\[\]\/\\.+?^$:=*!|]/g, '\\$&'), flags);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user