mirror of
https://github.com/gorhill/uBlock.git
synced 2024-11-10 09:07:54 +01:00
this fixes #101
This commit is contained in:
parent
e16dac9c39
commit
c8d0fd3814
1 changed files with 53 additions and 22 deletions
|
@ -73,6 +73,18 @@ vAPI.noTabId = '-1';
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var toChromiumTabId = function(tabId) {
|
||||
if ( typeof tabId === 'string' ) {
|
||||
tabId = parseInt(tabId, 10);
|
||||
}
|
||||
if ( typeof tabId !== 'number' || isNaN(tabId) || tabId === -1 ) {
|
||||
return 0;
|
||||
}
|
||||
return tabId;
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.tabs.registerListeners = function() {
|
||||
var onNavigationClient = this.onNavigation || noopFunc;
|
||||
var onPopupClient = this.onPopup || noopFunc;
|
||||
|
@ -204,17 +216,17 @@ vAPI.tabs.get = function(tabId, callback) {
|
|||
// Caller must be prepared to deal with nil tab value
|
||||
callback(tab);
|
||||
};
|
||||
|
||||
if ( tabId !== null ) {
|
||||
if ( typeof tabId === 'string' ) {
|
||||
tabId = parseInt(tabId, 10);
|
||||
}
|
||||
if ( typeof tabId !== 'number' || isNaN(tabId) ) {
|
||||
tabId = toChromiumTabId(tabId);
|
||||
if ( tabId === 0 ) {
|
||||
onTabReady(null);
|
||||
} else {
|
||||
chrome.tabs.get(tabId, onTabReady);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
var onTabReceived = function(tabs) {
|
||||
// https://code.google.com/p/chromium/issues/detail?id=410868#c8
|
||||
if ( chrome.runtime.lastError ) {
|
||||
|
@ -274,7 +286,7 @@ vAPI.tabs.open = function(details) {
|
|||
}
|
||||
|
||||
// update doesn't accept index, must use move
|
||||
chrome.tabs.update(parseInt(details.tabId, 10), _details, function(tab) {
|
||||
chrome.tabs.update(toChromiumTabId(details.tabId), _details, function(tab) {
|
||||
// if the tab doesn't exist
|
||||
if ( vAPI.lastError() ) {
|
||||
chrome.tabs.create(_details, focusWindow);
|
||||
|
@ -322,6 +334,11 @@ vAPI.tabs.open = function(details) {
|
|||
// Replace the URL of a tab. Noop if the tab does not exist.
|
||||
|
||||
vAPI.tabs.replace = function(tabId, url) {
|
||||
tabId = toChromiumTabId(tabId);
|
||||
if ( tabId === 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var targetURL = url;
|
||||
|
||||
// extension pages
|
||||
|
@ -329,17 +346,10 @@ vAPI.tabs.replace = function(tabId, url) {
|
|||
targetURL = vAPI.getURL(targetURL);
|
||||
}
|
||||
|
||||
if ( typeof tabId !== 'number' ) {
|
||||
tabId = parseInt(tabId, 10);
|
||||
if ( isNaN(tabId) ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
chrome.tabs.update(tabId, { url: targetURL }, function() {
|
||||
// this prevent console error
|
||||
// https://code.google.com/p/chromium/issues/detail?id=410868#c8
|
||||
if ( chrome.runtime.lastError ) {
|
||||
return;
|
||||
/* noop */
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -347,20 +357,37 @@ vAPI.tabs.replace = function(tabId, url) {
|
|||
/******************************************************************************/
|
||||
|
||||
vAPI.tabs.remove = function(tabId) {
|
||||
tabId = toChromiumTabId(tabId);
|
||||
if ( tabId === 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var onTabRemoved = function() {
|
||||
if ( vAPI.lastError() ) {
|
||||
// https://code.google.com/p/chromium/issues/detail?id=410868#c8
|
||||
if ( chrome.runtime.lastError ) {
|
||||
/* noop */
|
||||
}
|
||||
};
|
||||
chrome.tabs.remove(parseInt(tabId, 10), onTabRemoved);
|
||||
|
||||
chrome.tabs.remove(tabId, onTabRemoved);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.tabs.reload = function(tabId /*, flags*/) {
|
||||
if ( typeof tabId === 'string' ) {
|
||||
tabId = parseInt(tabId, 10);
|
||||
tabId = toChromiumTabId(tabId);
|
||||
if ( tabId === 0 ) {
|
||||
return;
|
||||
}
|
||||
chrome.tabs.reload(tabId);
|
||||
|
||||
var onReloaded = function() {
|
||||
// https://code.google.com/p/chromium/issues/detail?id=410868#c8
|
||||
if ( chrome.runtime.lastError ) {
|
||||
/* noop */
|
||||
}
|
||||
};
|
||||
|
||||
chrome.tabs.reload(tabId, onReloaded);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -369,14 +396,14 @@ vAPI.tabs.injectScript = function(tabId, details, callback) {
|
|||
var onScriptExecuted = function() {
|
||||
// https://code.google.com/p/chromium/issues/detail?id=410868#c8
|
||||
if ( chrome.runtime.lastError ) {
|
||||
/* noop */
|
||||
}
|
||||
if ( typeof callback === 'function' ) {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
if ( tabId ) {
|
||||
tabId = parseInt(tabId, 10);
|
||||
chrome.tabs.executeScript(tabId, details, onScriptExecuted);
|
||||
chrome.tabs.executeScript(toChromiumTabId(tabId), details, onScriptExecuted);
|
||||
} else {
|
||||
chrome.tabs.executeScript(details, onScriptExecuted);
|
||||
}
|
||||
|
@ -392,7 +419,11 @@ vAPI.tabs.injectScript = function(tabId, details, callback) {
|
|||
// anymore, so this ensures it does still exist.
|
||||
|
||||
vAPI.setIcon = function(tabId, iconStatus, badge) {
|
||||
tabId = parseInt(tabId, 10);
|
||||
tabId = toChromiumTabId(tabId);
|
||||
if ( tabId === 0 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var onIconReady = function() {
|
||||
if ( vAPI.lastError() ) {
|
||||
return;
|
||||
|
|
Loading…
Reference in a new issue