Size
8.2 KB
Version
1.1.3
Created
Feb 4, 2026
Updated
13 days ago
1// ==UserScript==
2// @name Online No-Buster
3// @description Opens multiple paths and subdomains for a given domain in separate tabs
4// @version 1.1.3
5// @match https://*.google.com/*
6// @icon https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico
7// ==/UserScript==
8(function() {
9 'use strict';
10
11 console.log('Online No-Buster');
12
13 // List of all paths and subdomains to check
14 const urlPaths = [
15 '/en',
16 '/global',
17 '/Login',
18 '/login',
19 '/Login.php',
20 '/login.php',
21 '/EN',
22 '/online',
23 '/Global',
24 '/robots.txt',
25 '/us',
26 '/s',
27 '/home',
28 '/main',
29 '/index.php',
30 '/index.html',
31 '/homes.php',
32 '/_en',
33 '/web',
34 '/Home',
35 '/home.php',
36 '/banks',
37 '/bank',
38 '/personal',
39 '/en/index.html',
40 '/en/index.php',
41 '/uk',
42 '/personal-banking',
43 '/en/home',
44 '/account',
45 '/mobile',
46 '/auth',
47 '/ib',
48 '/en-global',
49 '/online/login',
50 '/user',
51 '/secured',
52 '/about-us',
53 '/1',
54 '/welcome',
55 '/support',
56 '/Verify',
57 '/lb',
58 '/client'
59 ];
60
61 const subdomains = [
62 'secure',
63 'login',
64 'auth',
65 'online',
66 'en',
67 'ibank'
68 ];
69
70 function createDomainExplorerUI() {
71 // Create the main container
72 const container = document.createElement('div');
73 container.id = 'domain-explorer-container';
74 container.style.cssText = `
75 position: fixed;
76 top: 20px;
77 right: 20px;
78 width: 320px;
79 background: #ffffff;
80 border: 2px solid #4285f4;
81 border-radius: 8px;
82 padding: 20px;
83 box-shadow: 0 4px 12px rgba(0,0,0,0.15);
84 z-index: 10000;
85 font-family: Arial, sans-serif;
86 font-size: 14px;
87 `;
88
89 // Create title
90 const title = document.createElement('h3');
91 title.textContent = 'Multi-URL Domain Explorer';
92 title.style.cssText = `
93 margin: 0 0 15px 0;
94 color: #333;
95 font-size: 16px;
96 font-weight: bold;
97 `;
98
99 // Create input field
100 const input = document.createElement('input');
101 input.type = 'text';
102 input.placeholder = 'Enter domain (e.g., example.com)';
103 input.style.cssText = `
104 width: 100%;
105 padding: 10px;
106 border: 1px solid #ddd;
107 border-radius: 4px;
108 margin-bottom: 15px;
109 box-sizing: border-box;
110 font-size: 14px;
111 `;
112
113 // Create button
114 const button = document.createElement('button');
115 button.textContent = 'Open Multiple URLs';
116 button.style.cssText = `
117 width: 100%;
118 padding: 12px;
119 background: #4285f4;
120 color: white;
121 border: none;
122 border-radius: 4px;
123 cursor: pointer;
124 font-size: 14px;
125 font-weight: bold;
126 `;
127
128 // Create status display
129 const status = document.createElement('div');
130 status.style.cssText = `
131 margin-top: 10px;
132 padding: 8px;
133 background: #f8f9fa;
134 border-radius: 4px;
135 font-size: 12px;
136 color: #666;
137 display: none;
138 `;
139
140 // Create close button
141 const closeButton = document.createElement('button');
142 closeButton.textContent = '×';
143 closeButton.style.cssText = `
144 position: absolute;
145 top: 5px;
146 right: 10px;
147 background: none;
148 border: none;
149 font-size: 20px;
150 cursor: pointer;
151 color: #999;
152 width: 25px;
153 height: 25px;
154 `;
155
156 // Add hover effects
157 button.addEventListener('mouseenter', () => {
158 button.style.background = '#3367d6';
159 });
160
161 button.addEventListener('mouseleave', () => {
162 button.style.background = '#4285f4';
163 });
164
165 closeButton.addEventListener('mouseenter', () => {
166 closeButton.style.color = '#333';
167 });
168
169 closeButton.addEventListener('mouseleave', () => {
170 closeButton.style.color = '#999';
171 });
172
173 // Add click handlers
174 closeButton.addEventListener('click', () => {
175 container.remove();
176 });
177
178 button.addEventListener('click', async () => {
179 const domain = input.value.trim();
180 if (!domain) {
181 alert('Please enter a domain');
182 return;
183 }
184
185 // Clean domain (remove protocol if present)
186 const cleanDomain = domain.replace(/^https?:\/\//, '').replace(/\/$/, '');
187
188 status.style.display = 'block';
189 status.textContent = 'Opening URLs...';
190 button.disabled = true;
191 button.textContent = 'Opening...';
192
193 try {
194 await openAllUrls(cleanDomain, status);
195 status.textContent = `Successfully opened ${urlPaths.length + subdomains.length} URLs!`;
196 button.textContent = 'Open Multiple URLs';
197 button.disabled = false;
198 } catch (error) {
199 console.error('Error opening URLs:', error);
200 status.textContent = 'Error occurred while opening URLs';
201 button.textContent = 'Open Multiple URLs';
202 button.disabled = false;
203 }
204 });
205
206 // Allow Enter key to trigger button
207 input.addEventListener('keypress', (e) => {
208 if (e.key === 'Enter') {
209 button.click();
210 }
211 });
212
213 // Assemble the UI
214 container.appendChild(closeButton);
215 container.appendChild(title);
216 container.appendChild(input);
217 container.appendChild(button);
218 container.appendChild(status);
219
220 document.body.appendChild(container);
221
222 console.log('Domain Explorer UI created');
223 }
224
225 async function openAllUrls(domain, statusElement) {
226 let openedCount = 0;
227 const totalUrls = urlPaths.length + subdomains.length;
228
229 // Open all path URLs
230 for (const path of urlPaths) {
231 const url = `https://${domain}${path}`;
232 console.log('Opening URL:', url);
233
234 try {
235 await GM.openInTab(url, true); // Open in background
236 openedCount++;
237 statusElement.textContent = `Opened ${openedCount}/${totalUrls} URLs...`;
238
239 // Small delay to prevent overwhelming the browser
240 await new Promise(resolve => setTimeout(resolve, 100));
241 } catch (error) {
242 console.error('Failed to open URL:', url, error);
243 }
244 }
245
246 // Open all subdomain URLs
247 for (const subdomain of subdomains) {
248 const url = `https://${subdomain}.${domain}`;
249 console.log('Opening URL:', url);
250
251 try {
252 await GM.openInTab(url, true); // Open in background
253 openedCount++;
254 statusElement.textContent = `Opened ${openedCount}/${totalUrls} URLs...`;
255
256 // Small delay to prevent overwhelming the browser
257 await new Promise(resolve => setTimeout(resolve, 100));
258 } catch (error) {
259 console.error('Failed to open URL:', url, error);
260 }
261 }
262
263 console.log(`Successfully opened ${openedCount} URLs for domain: ${domain}`);
264 }
265
266 // Initialize the extension
267 function init() {
268 // Wait for page to be ready
269 if (document.readyState === 'loading') {
270 document.addEventListener('DOMContentLoaded', createDomainExplorerUI);
271 } else {
272 createDomainExplorerUI();
273 }
274 }
275
276 // Start the extension
277 init();
278})();