|
705 | 705 | const needleNot = needle.charAt(0) === '!'; |
706 | 706 | if ( needleNot ) { needle = needle.slice(1); } |
707 | 707 | let delay = '{{2}}'; |
708 | | - const delayNot = delay.charAt(0) === '!'; |
709 | | - if ( delayNot ) { delay = delay.slice(1); } |
710 | | - delay = parseInt(delay, 10); |
| 708 | + if ( delay === '{{2}}' ) { delay = undefined; } |
| 709 | + let delayNot = false; |
| 710 | + if ( delay !== undefined ) { |
| 711 | + delayNot = delay.charAt(0) === '!'; |
| 712 | + if ( delayNot ) { delay = delay.slice(1); } |
| 713 | + delay = parseInt(delay, 10); |
| 714 | + } |
711 | 715 | if ( needle === '' || needle === '{{1}}' ) { |
712 | 716 | needle = ''; |
713 | 717 | } else if ( needle.startsWith('/') && needle.endsWith('/') ) { |
714 | 718 | needle = needle.slice(1,-1); |
715 | 719 | } else { |
716 | 720 | needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); |
717 | 721 | } |
718 | | - const log = needleNot === false && needle === '' && |
719 | | - delayNot === false && isNaN(delay) |
| 722 | + const log = needleNot === false && needle === '' && delay === undefined |
720 | 723 | ? console.log |
721 | 724 | : undefined; |
722 | 725 | const reNeedle = new RegExp(needle); |
723 | 726 | window.setInterval = new Proxy(window.setInterval, { |
724 | 727 | apply: function(target, thisArg, args) { |
725 | 728 | const a = String(args[0]); |
726 | 729 | const b = args[1]; |
727 | | - let defuse = false; |
728 | 730 | if ( log !== undefined ) { |
729 | 731 | log('uBO: setInterval("%s", %s)', a, b); |
730 | | - } else if ( isNaN(delay) ) { |
731 | | - defuse = reNeedle.test(a) !== needleNot; |
732 | | - } else if ( needle === '' ) { |
733 | | - defuse = (b === delay) !== delayNot; |
734 | 732 | } else { |
735 | | - defuse = reNeedle.test(a) !== needleNot && (b === delay) !== delayNot; |
736 | | - } |
737 | | - if ( defuse ) { |
738 | | - args[0] = function(){}; |
| 733 | + let defuse; |
| 734 | + if ( needle !== '' ) { |
| 735 | + defuse = reNeedle.test(a) !== needleNot; |
| 736 | + } |
| 737 | + if ( defuse !== false && delay !== undefined ) { |
| 738 | + defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot; |
| 739 | + } |
| 740 | + if ( defuse ) { |
| 741 | + args[0] = function(){}; |
| 742 | + } |
739 | 743 | } |
740 | 744 | return target.apply(thisArg, args); |
741 | 745 | } |
|
776 | 780 | const needleNot = needle.charAt(0) === '!'; |
777 | 781 | if ( needleNot ) { needle = needle.slice(1); } |
778 | 782 | let delay = '{{2}}'; |
779 | | - const delayNot = delay.charAt(0) === '!'; |
780 | | - if ( delayNot ) { delay = delay.slice(1); } |
781 | | - delay = parseInt(delay, 10); |
| 783 | + if ( delay === '{{2}}' ) { delay = undefined; } |
| 784 | + let delayNot = false; |
| 785 | + if ( delay !== undefined ) { |
| 786 | + delayNot = delay.charAt(0) === '!'; |
| 787 | + if ( delayNot ) { delay = delay.slice(1); } |
| 788 | + delay = parseInt(delay, 10); |
| 789 | + } |
782 | 790 | if ( needle === '' || needle === '{{1}}' ) { |
783 | 791 | needle = ''; |
784 | 792 | } else if ( needle.startsWith('/') && needle.endsWith('/') ) { |
785 | 793 | needle = needle.slice(1,-1); |
786 | 794 | } else { |
787 | 795 | needle = needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); |
788 | 796 | } |
789 | | - const log = needleNot === false && needle === '' && |
790 | | - delayNot === false && isNaN(delay) |
| 797 | + const log = needleNot === false && needle === '' && delay === undefined |
791 | 798 | ? console.log |
792 | 799 | : undefined; |
793 | 800 | const reNeedle = new RegExp(needle); |
794 | 801 | window.setTimeout = new Proxy(window.setTimeout, { |
795 | 802 | apply: function(target, thisArg, args) { |
796 | 803 | const a = String(args[0]); |
797 | 804 | const b = args[1]; |
798 | | - let defuse = false; |
799 | 805 | if ( log !== undefined ) { |
800 | 806 | log('uBO: setTimeout("%s", %s)', a, b); |
801 | | - } else if ( isNaN(delay) ) { |
802 | | - defuse = reNeedle.test(a) !== needleNot; |
803 | | - } else if ( needle === '' ) { |
804 | | - defuse = (b === delay) !== delayNot; |
805 | 807 | } else { |
806 | | - defuse = reNeedle.test(a) !== needleNot && (b === delay) !== delayNot; |
807 | | - } |
808 | | - if ( defuse ) { |
809 | | - args[0] = function(){}; |
| 808 | + let defuse; |
| 809 | + if ( needle !== '' ) { |
| 810 | + defuse = reNeedle.test(a) !== needleNot; |
| 811 | + } |
| 812 | + if ( defuse !== false && delay !== undefined ) { |
| 813 | + defuse = (b === delay || isNaN(b) && isNaN(delay) ) !== delayNot; |
| 814 | + } |
| 815 | + if ( defuse ) { |
| 816 | + args[0] = function(){}; |
| 817 | + } |
810 | 818 | } |
811 | 819 | return target.apply(thisArg, args); |
812 | 820 | } |
|
0 commit comments