mirror of https://github.com/gorhill/uBlock.git
this fixes #1128
This commit is contained in:
parent
eb27478cc7
commit
5b34efc55e
|
@ -319,9 +319,6 @@ vAPI.tabs.open = function(details) {
|
||||||
|
|
||||||
vAPI.tabs.replace = function(tabId, url) {
|
vAPI.tabs.replace = function(tabId, url) {
|
||||||
var targetURL = url;
|
var targetURL = url;
|
||||||
if ( typeof targetURL !== 'string' || targetURL === '' ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// extension pages
|
// extension pages
|
||||||
if ( /^[\w-]{2,}:/.test(targetURL) !== true ) {
|
if ( /^[\w-]{2,}:/.test(targetURL) !== true ) {
|
||||||
|
@ -340,7 +337,6 @@ vAPI.tabs.replace = function(tabId, url) {
|
||||||
if ( chrome.runtime.lastError ) {
|
if ( chrome.runtime.lastError ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -377,6 +377,24 @@
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
// Replace the URL of a tab. Noop if the tab does not exist.
|
||||||
|
|
||||||
|
vAPI.tabs.replace = function(tabId, url) {
|
||||||
|
var targetURL = url;
|
||||||
|
|
||||||
|
// extension pages
|
||||||
|
if ( /^[\w-]{2,}:/.test(targetURL) !== true ) {
|
||||||
|
targetURL = vAPI.getURL(targetURL);
|
||||||
|
}
|
||||||
|
|
||||||
|
var tab = this.stack[tabId];
|
||||||
|
if ( tab ) {
|
||||||
|
tab.url = targetURL;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
vAPI.tabs.remove = function(tabIds) {
|
vAPI.tabs.remove = function(tabIds) {
|
||||||
if(tabIds instanceof SafariBrowserTab) {
|
if(tabIds instanceof SafariBrowserTab) {
|
||||||
tabIds = this.getTabId(tabIds);
|
tabIds = this.getTabId(tabIds);
|
||||||
|
|
|
@ -96,6 +96,8 @@ if ( window.history.length > 1 ) {
|
||||||
uDom('#proceedTemporary').attr('href', details.url).on('click', proceedTemporary);
|
uDom('#proceedTemporary').attr('href', details.url).on('click', proceedTemporary);
|
||||||
uDom('#proceedPermanent').attr('href', details.url).on('click', proceedPermanent);
|
uDom('#proceedPermanent').attr('href', details.url).on('click', proceedPermanent);
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
|
@ -96,8 +96,8 @@ var reURLPostHostnameAnchors = /[\/?#]/;
|
||||||
|
|
||||||
var pageHostnameRegister = '';
|
var pageHostnameRegister = '';
|
||||||
var requestHostnameRegister = '';
|
var requestHostnameRegister = '';
|
||||||
var filterRegister = null;
|
//var filterRegister = null;
|
||||||
var categoryRegister = '';
|
//var categoryRegister = '';
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -219,6 +219,11 @@ var onBeforeRootFrameRequest = function(details) {
|
||||||
// Filtering
|
// Filtering
|
||||||
if ( result === '' && µb.getNetFilteringSwitch(requestURL) ) {
|
if ( result === '' && µb.getNetFilteringSwitch(requestURL) ) {
|
||||||
result = µb.staticNetFilteringEngine.matchString(context);
|
result = µb.staticNetFilteringEngine.matchString(context);
|
||||||
|
// https://github.com/gorhill/uBlock/issues/1128
|
||||||
|
// Do not block if the match begins after the hostname.
|
||||||
|
if ( result !== '' ) {
|
||||||
|
result = toBlockDocResult(requestURL, requestHostname, result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log
|
// Log
|
||||||
|
@ -246,6 +251,60 @@ var onBeforeRootFrameRequest = function(details) {
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
var toBlockDocResult = function(url, hostname, result) {
|
||||||
|
if ( result.charAt(1) !== 'b' ) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Quick test: if the result starts with `|` or `||`, then this means the
|
||||||
|
// match is before the path part of the URL for sure.
|
||||||
|
// Examples: sb:|http:// sb:||example.com^
|
||||||
|
if ( result.charAt(3) === '|' ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make a regex out of the result
|
||||||
|
var reText = result.slice(3);
|
||||||
|
var pos = reText.indexOf('$');
|
||||||
|
if ( pos > 0 ) {
|
||||||
|
reText = reText.slice(0, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Matches whole URL
|
||||||
|
if ( reText === '*' ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We are going to have to take the long way to find out
|
||||||
|
if ( reText.charAt(0) === '/' && reText.slice(-1) === '/' ) {
|
||||||
|
reText = reText.slice(1, -1);
|
||||||
|
} else {
|
||||||
|
reText = reText
|
||||||
|
.replace(/\./g, '\\.')
|
||||||
|
.replace(/\?/g, '\\?')
|
||||||
|
.replace(/^\|\|/, '')
|
||||||
|
.replace(/\^/g, '.')
|
||||||
|
.replace(/^\|/g, '^')
|
||||||
|
.replace(/\|$/g, '$')
|
||||||
|
.replace(/\*/g, '.*');
|
||||||
|
}
|
||||||
|
|
||||||
|
var re = new RegExp(reText, 'gi');
|
||||||
|
var matches = re.exec(url);
|
||||||
|
if ( matches === null ) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify that the match starts before the path
|
||||||
|
if ( matches.index < url.indexOf(hostname) + hostname.length ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
// Intercept and filter behind-the-scene requests.
|
// Intercept and filter behind-the-scene requests.
|
||||||
|
|
||||||
var onBeforeBehindTheSceneRequest = function(details) {
|
var onBeforeBehindTheSceneRequest = function(details) {
|
||||||
|
|
Loading…
Reference in New Issue