Add new scriptlet: no-fetch-if · gorhill/uBlock@ba11a70 (original) (raw)

`@@ -583,6 +583,65 @@

`

583

583

`})();

`

584

584

``

585

585

``

``

586

`+

/// no-fetch-if.js

`

``

587

`+

(function() {

`

``

588

`+

let arg1 = '{{1}}';

`

``

589

`+

if ( arg1 === '{{1}}' ) { arg1 = ''; }

`

``

590

`+

const needles = [];

`

``

591

`+

for ( const condition of arg1.split(/\s+/) ) {

`

``

592

`+

const pos = condition.indexOf(':');

`

``

593

`+

let key, value;

`

``

594

`+

if ( pos !== -1 ) {

`

``

595

`+

key = condition.slice(0, pos);

`

``

596

`+

value = condition.slice(pos + 1);

`

``

597

`+

} else {

`

``

598

`+

key = 'url';

`

``

599

`+

value = condition;

`

``

600

`+

}

`

``

601

`+

if ( value === '' ) {

`

``

602

`+

value = '^';

`

``

603

`+

} else if ( value.startsWith('/') && value.endsWith('/') ) {

`

``

604

`+

value = value.slice(1, -1);

`

``

605

`+

} else {

`

``

606

`+

value = value.replace(/[.*+?^${}()|[]\]/g, '\$&');

`

``

607

`+

}

`

``

608

`+

needles.push({ key, re: new RegExp(value) });

`

``

609

`+

}

`

``

610

`+

self.fetch = new Proxy(self.fetch, {

`

``

611

`+

apply: function(target, thisArg, args) {

`

``

612

`+

let proceed = true;

`

``

613

`+

try {

`

``

614

`+

const url = args[0] instanceof self.Request

`

``

615

`+

? args[0].url

`

``

616

`+

: args[0];

`

``

617

`+

const props = new Map([ [ 'url', url ] ]);

`

``

618

`+

const init = args[1];

`

``

619

`+

if ( init instanceof Object ) {

`

``

620

`+

for ( const prop in init ) {

`

``

621

`+

if ( init.hasOwnProperty(prop) === false ) { continue; }

`

``

622

`+

props.set( prop, init[prop]);

`

``

623

`+

}

`

``

624

`+

}

`

``

625

`+

proceed = false;

`

``

626

`+

for ( const { key, re } of needles ) {

`

``

627

`+

if (

`

``

628

`+

props.has(key) === false ||

`

``

629

`+

re.test(props.get(key)) === false

`

``

630

`+

) {

`

``

631

`+

proceed = true;

`

``

632

`+

break;

`

``

633

`+

}

`

``

634

`+

}

`

``

635

`+

} catch(ex) {

`

``

636

`+

}

`

``

637

`+

return proceed

`

``

638

`+

? Reflect.apply(target, thisArg, args)

`

``

639

`+

: Promise.resolve(new Response());

`

``

640

`+

}

`

``

641

`+

});

`

``

642

`+

})();

`

``

643

+

``

644

+

586

645

`/// remove-attr.js

`

587

646

`/// alias ra.js

`

588

647

`(function() {

`

646

705

`})();

`

647

706

``

648

707

``

649

``

`-

/// requestAnimationFrame-if.js

`

650

``

`-

/// alias raf-if.js

`

651

``

`-

// Deprecated, use "no-requestAnimationFrame-if.js"

`

652

``

`-

(function() {

`

653

``

`-

let needle = '{{1}}';

`

654

``

`-

const not = needle.charAt(0) === '!';

`

655

``

`-

if ( not ) { needle = needle.slice(1); }

`

656

``

`-

if ( needle === '' || needle === '{{1}}' ) {

`

657

``

`-

needle = '.?';

`

658

``

`-

} else if ( needle.startsWith('/') && needle.endsWith('/') ) {

`

659

``

`-

needle = needle.slice(1,-1);

`

660

``

`-

} else {

`

661

``

`-

needle = needle.replace(/[.*+?^${}()|[]\]/g, '\$&');

`

662

``

`-

}

`

663

``

`-

const log = needle === '.?' && not === false ? console.log : undefined;

`

664

``

`-

needle = new RegExp(needle);

`

665

``

`-

window.requestAnimationFrame = new Proxy(window.requestAnimationFrame, {

`

666

``

`-

apply: function(target, thisArg, args) {

`

667

``

`-

const a = String(args[0]);

`

668

``

`-

if ( log !== undefined ) {

`

669

``

`-

log('uBO: requestAnimationFrame("%s")', a);

`

670

``

`-

} else if ( needle.test(a) === not ) {

`

671

``

`-

args[0] = function(){};

`

672

``

`-

}

`

673

``

`-

return target.apply(thisArg, args);

`

674

``

`-

}

`

675

``

`-

});

`

676

``

`-

})();

`

677

``

-

678

``

-

679

708

`/// no-requestAnimationFrame-if.js

`

680

709

`/// alias norafif.js

`

681

710

`(function() {

`

827

856

`})();

`

828

857

``

829

858

``

830

``

`-

/// setInterval-defuser.js

`

831

``

`-

/// alias sid.js

`

832

``

`-

(function() {

`

833

``

`-

let needle = '{{1}}';

`

834

``

`-

const delay = parseInt('{{2}}', 10);

`

835

``

`-

if ( needle === '' || needle === '{{1}}' ) {

`

836

``

`-

needle = '.?';

`

837

``

`-

} else if ( needle.startsWith('/') && needle.endsWith('/') ) {

`

838

``

`-

needle = needle.slice(1,-1);

`

839

``

`-

} else {

`

840

``

`-

needle = needle.replace(/[.*+?^${}()|[]\]/g, '\$&');

`

841

``

`-

}

`

842

``

`-

needle = new RegExp(needle);

`

843

``

`-

window.setInterval = new Proxy(window.setInterval, {

`

844

``

`-

apply: function(target, thisArg, args) {

`

845

``

`-

const a = args[0];

`

846

``

`-

const b = args[1];

`

847

``

`-

if ( (isNaN(delay) || b === delay) && needle.test(a.toString()) ) {

`

848

``

`-

args[0] = function(){};

`

849

``

`-

}

`

850

``

`-

return target.apply(thisArg, args);

`

851

``

`-

}

`

852

``

`-

});

`

853

``

`-

})();

`

854

``

-

855

``

-

856

859

`/// no-setInterval-if.js

`

857

860

`/// alias nosiif.js

`

858

861

`(function() {

`

902

905

`})();

`

903

906

``

904

907

``

905

``

`-

/// setTimeout-defuser.js

`

906

``

`-

/// alias std.js

`

907

``

`-

(function() {

`

908

``

`-

let needle = '{{1}}';

`

909

``

`-

const delay = parseInt('{{2}}', 10);

`

910

``

`-

if ( needle === '' || needle === '{{1}}' ) {

`

911

``

`-

needle = '.?';

`

912

``

`-

} else if ( needle.startsWith('/') && needle.endsWith('/') ) {

`

913

``

`-

needle = needle.slice(1,-1);

`

914

``

`-

} else {

`

915

``

`-

needle = needle.replace(/[.*+?^${}()|[]\]/g, '\$&');

`

916

``

`-

}

`

917

``

`-

needle = new RegExp(needle);

`

918

``

`-

window.setTimeout = new Proxy(window.setTimeout, {

`

919

``

`-

apply: function(target, thisArg, args) {

`

920

``

`-

const a = args[0];

`

921

``

`-

const b = args[1];

`

922

``

`-

if ( (isNaN(delay) || b === delay) && needle.test(a.toString()) ) {

`

923

``

`-

args[0] = function(){};

`

924

``

`-

}

`

925

``

`-

return target.apply(thisArg, args);

`

926

``

`-

}

`

927

``

`-

});

`

928

``

`-

})();

`

929

``

-

930

``

-

931

908

`/// no-setTimeout-if.js

`

932

909

`/// alias nostif.js

`

``

910

`+

/// alias setTimeout-defuser.js

`

933

911

`(function() {

`

934

912

`let needle = '{{1}}';

`

935

913

`const needleNot = needle.charAt(0) === '!';

`