Add neutered replacement script for mixpanel

Related discussion:
- https://www.reddit.com/r/uBlockOrigin/comments/oicch9/

The new replacement script contains the smallest API
possible to resolve the reported case.

Please report instances where it's not sufficient to
unbreak a site, in which case I will extend the neutered
API to address these cases on an on-demand basis.
This commit is contained in:
Raymond Hill 2021-07-13 07:58:31 -04:00
parent 7735ad119d
commit e03bb99f57
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
2 changed files with 53 additions and 0 deletions

View File

@ -109,6 +109,8 @@ const redirectableResources = new Map([
[ 'ligatus_angular-tag.js', { [ 'ligatus_angular-tag.js', {
alias: 'ligatus.com/*/angular-tag.js', alias: 'ligatus.com/*/angular-tag.js',
} ], } ],
[ 'mxpnl_mixpanel.js', {
} ],
[ 'monkeybroker.js', { [ 'monkeybroker.js', {
alias: 'd3pkae9owd2lcf.cloudfront.net/mb105.js', alias: 'd3pkae9owd2lcf.cloudfront.net/mb105.js',
} ], } ],

View File

@ -0,0 +1,51 @@
/*******************************************************************************
uBlock Origin - a browser extension to block requests.
Copyright (C) 2021-present Raymond Hill
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see {http://www.gnu.org/licenses/}.
Home: https://github.com/gorhill/uBlock
*/
(function() {
'use strict';
// https://developer.mixpanel.com/docs/javascript-full-api-reference
const mixpanel = {
get_distinct_id() {
return '';
},
init(t, cfg) {
if ( cfg instanceof Object === false ) { return; }
if ( 'loaded' in cfg === false ) { return; }
if ( cfg.loaded instanceof Function === false ) { return; }
cfg.loaded();
},
register() {
},
register_once() {
},
track() {
const cb = Array.from(arguments).pop();
if ( cb instanceof Function === false ) { return; }
cb();
},
};
const q = self.mixpanel && self.mixpanel._i || [];
self.mixpanel = mixpanel;
for ( const i of q ) {
if ( Array.isArray(i) === false ) { continue; }
mixpanel.init(...i);
}
})();