Inject some javascript into these websites
Version au
// ==UserScript==
// @name Construction JavaScript Injection
// @description Inject some javascript into these websites
// @version 1.0.0
// @author Oliver P
// @namespace https://github.com/OlisDevSpot
// @license MIT
// @match *://*/*
// @run-at document-end
// @compatible safari
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_registerMenuCommand
// ==/UserScript==
// jshint esversion: 8
(async function() {
// Only run config in top window
if (window.self !== window.top) return;
let company = await GM_getValue('company');
let firstName = await GM_getValue('firstName');
let lastName = await GM_getValue('lastName');
if (!company || !firstName || !lastName) {
// Register a menu option to configure later
GM_registerMenuCommand('Set Sales Credentials', configure);
// Ask upfront
await configure();
}
async function configure() {
company = prompt('Enter your company name (e.g. david-star):') || '';
firstName = prompt('First name:') || '';
lastName = prompt('Last name:') || '';
if (company && firstName && lastName) {
await GM_setValue('company', company);
await GM_setValue('firstName', firstName);
await GM_setValue('lastName', lastName);
location.reload();
} else {
alert('Values cannot be empty!');
}
}
// Build dynamic fetch URL
const salesperson = { firstName, lastName };
const currentSiteUrl = encodeURIComponent(window.location.href);
const params = new URLSearchParams({
data: JSON.stringify({ currentSiteUrl, salesperson })
});
const url = `https://${company}.pages.dev/your-endpoint?${params}`;
// Inject dynamic code
fetch(url)
.then(res => res.text())
.then(code => {
const s = document.createElement('script');
s.textContent = code;
document.head.appendChild(s);
})
.catch(err => console.error('Inject error:', err));
})();