Я хочу заменить URL-адрес файла CSS сайта через href, я знаю, что можно ссылаться на внешние ссылки, содержащие CSS, но как насчет локального файла?
document.querySelector("head > link:nth-child(7)").href = "http://example.com/style.css"



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Одним из вариантов может быть локальный файл сценарий, возможно, тот, который присваивает желаемый текст CSS свойству window, который затем можно получить внутри вашего пользовательского скрипта. Например:
// ==UserScript==
// @name local
// @match https://example.com
// @require file:///C:/local.js
// ==/UserScript==
document.head.appendChild(document.createElement('style'))
.textContent = window.cssTextFromLocal;
а также
// local.js
window.cssTextFromLocal = `
body {
background-color: green;
}
`;
Обязательно разрешить доступ к локальным файлам.
Конечно, если вы хотите сделать это безусловно (при каждой загрузке страницы, независимо), нет необходимости в межскриптовом взаимодействии, и вы можете вставить <style> в DOM внутри local.js.
Как и все расширения Chrome, Tampermonkey по умолчанию имеет ряд ограничений, призванных предотвратить злонамеренные действия разработчиков. Если бы у Tampermonkey был неограниченный доступ к вашей файловой системе, авторы пользовательских скриптов могли бы легко злоупотребить разрешением, чтобы украсть или изменить ваши данные без вашего ведома.
Самое близкое, что вы могли бы сделать, это разместить сервер на вашем локальном компьютере (например, с помощью Node.js). Это позволит вам предоставить Tampermonkey URL-адрес, например localhost/style.css, который будет обслуживаться локально с вашего компьютера. Однако это будет работать только тогда, когда у вас запущен сервер.
В качестве альтернативы вы можете создать собственное расширение Chrome для режима разработчика, которое содержит таблицу стилей в своем web_accessible_resources и внедряет ее на основе правила DeclarativeContent. Однако это будет означать полный обход Tampermonkey, так что это не совсем ответит на вопрос.