Как открыть локальный HTML-файл с параметром (query string) из контекстного меню Notepad++
Проблема: при попытке открыть локально хранящийся index.html из контекстного меню Notepad++ с передачей параметра в URL (через ?), сам файл открывается, но параметр (query string) в браузере оказывается пустым — window.location.search возвращает пустую строку. При прямой вставке URL с параметром в адресную строку браузера всё работает.
Короткий ответ
Не передаётся query string, если вы запускаете локальный файл как обычный путь. Решение — вызвать браузер явно и передать ему file:/// URL с тремя слешами и прямыми слешами; аргумент URL должен быть в кавычках. Примеры конфигурации команд ниже.
Пояснение простыми словами
- Когда вы указываете просто путь к файлу (например C:\путь\файл.html?параметр) или используете форму, при которой Notepad++ / Windows обрабатывает путь, знак вопроса может экранироваться или трактоваться как часть имени файла — в результате браузер не видит query string.
- Если же вы передаёте браузеру корректный file URI вида file:///C:/путь/файл.html?параметр, браузер корректно разбирает URL и query string доступен через window.location.search.
- Обратите внимание на прямые (/) слеши в URI вместо обратных (\\), а также на кавычки вокруг всего аргумента.
Исходные примеры (не менять)
Вот примеры команд и проверочного кода, как они выглядят:
<Command name="OSM History" Ctrl="no" Alt="yes" Shift="no" Key="114">file:///E:/dwgs/Json/OSM_tag_history/index.html?$(CURRENT_WORD)</Command>
console.log("Search params:", window.location.search);
console.log("Full href:", window.location.href);
<Command name="Google Search" Ctrl="no" Alt="yes" Shift="no" Key="113">https://www.google.com/search?q=$(CURRENT_WORD)</Command>
<Command name="Example" Ctrl="no" Alt="yes" Shift="no" Key="0">"C:\path\to\browser.exe" "C:\path\to\file.html?$(CURRENT_WORD)"</Command>
<Command name="Example" Ctrl="no" Alt="yes" Shift="no" Key="0">"C:\path\to\browser.exe" "file:///C:/path/to/file.html?$(CURRENT_WORD)"</Command>
Варианты решений
Ниже — варианты, из которых следует выбирать в зависимости от окружения и предпочтений.
Вариант 1 — Рекомендуемый: запуск браузера с file:/// URL
- Укажите полный путь до исполняемого файла браузера в команде Notepad++.
- Передайте браузеру файл в виде file:///C:/путь/к/файлу.html?$(CURRENT_WORD).
- Используйте прямые слеши (/) и обязательно обведите в кавычки весь аргумент, чтобы пробелы или спецсимволы не ломали команду.
Пример рабочего варианта:
<Command name="Example" Ctrl="no" Alt="yes" Shift="no" Key="0">"C:\path\to\browser.exe" "file:///C:/path/to/file.html?$(CURRENT_WORD)"</Command>
Почему работает: вы явно запускаете браузер и сразу даёте ему корректно сформированный URI. Браузер разбирает URI и query string попадает в window.location.search.
Вариант 2 — Попытка: запуск браузера с локальным путём и query (не надёжно)
Иногда пробуют вызвать браузер передав обычный Windows-путь с вопросительным знаком:
<Command name="Example" Ctrl="no" Alt="yes" Shift="no" Key="0">"C:\path\to\browser.exe" "C:\path\to\file.html?$(CURRENT_WORD)"</Command>
Почему не стоит: в этой форме знак вопроса часто экранируется или становится частью имени файла, поэтому OS/браузер не распознаёт query string и попытка открыть файл с таким именем завершается неудачей (файл не найден).
Вариант 3 — Вызов только file:/// в самой строке команды Notepad++ (иногда не проходит)
Если вы пытаетесь поместить file:///… прямо в элемент конфигурации команд (без явного указания браузера), Notepad++ может по-своему интерпретировать такое значение и лишний раз экранировать символы. Поэтому надёжнее указывать браузер явно.
Практические рекомендации и чеклист
- Всегда указывайте полный путь до браузера: «C:\path\to\browser.exe».
- Передавайте URL в виде file:///C:/путь/к/файлу.html?параметр — три слеша и прямые слеши.
- Заключайте аргумент URL в кавычки: «file:///C:/…?…».
- Проверьте, что макрос Notepad++ ($(CURRENT_WORD) или другой) действительно подставляет нужное значение.
- Если нужен https/https URL — обычно всё работает напрямую (пример с Google Search показывает, что веб-URL с параметрами корректно передаётся).
- Для отладки добавьте в ваш HTML-файл временные console.log или выводы в DOM, чтобы убедиться, что query string читается.
Короткий пример рабочего набора
Настройка команды в Notepad++ (пример):
<Command name="Example" Ctrl="no" Alt="yes" Shift="no" Key="0">"C:\path\to\browser.exe" "file:///C:/path/to/file.html?$(CURRENT_WORD)"</Command>
Выводы
- Проблема не в браузере — браузер правильно обрабатывает file URI, если он получает корректный URL.
- Причина — способ передачи аргумента из Notepad++/Windows: обычный путь с вопросительным знаком часто интерпретируется неверно.
- Решение: явно запускать браузер и передавать ему аргумент в формате file:/// с прямыми слешами и в кавычках. Это универсальный и надёжный способ.
Если после этого всё ещё не работает, проверьте, нет ли дополнительных правил экранирования в вашей конкретной конфигурации Notepad++ (файлы конфигурации, плагин, через который вы редактируете меню) и протестируйте команду в командной строке Windows вручную, чтобы убедиться, что аргументы передаются правильно.