Construction JavaScript Injection

Inject some javascript into these websites

Per 27-06-2025. Zie de nieuwste versie.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name            Construction JavaScript Injection
// @description     Inject some javascript into these websites
// @version         1.0.1
// @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));
})();