Задать вопрос

Почему с ошибкой обрабатывается символ пробела в Javascript-е?

Добрый день, столкнулся с проблемой при создании собственного URI протокола
А именно нужно, чтобы ссылки типа explorer:// открывались как бы проводником, т.е. другими словами содержимое ссылки после explorer:// отправлялась проводнику как контекст

Таким образом была создана запись в реестре, описывающий новый протокол, и цель данной записи было описание действие системы/браузеры при клике по данной ссылке, действие было следующим:

mshta javascript:new(ActiveXObject)('WScript.Shell').Run(decodeURIComponent(escape('%1'.substr(9)))),window.close()


Файл реестра

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Classes\explorer]
"URL Protocol"=""
@="Explorer"

[HKEY_CURRENT_USER\SOFTWARE\Classes\explorer\shell]

[HKEY_CURRENT_USER\SOFTWARE\Classes\explorer\shell\open]

[HKEY_CURRENT_USER\SOFTWARE\Classes\explorer\shell\open\command]
@="mshta javascript:new(ActiveXObject)('WScript.Shell').Run(decodeURIComponent(escape('%1'.substr(9)))),window.close()"


Проблема заключается в том, что данный скрипт успешно отрабатывает на следующих ссылках

<a href="explorer:\\\\DESKTOP-9NVI47I\\temp\\word">word</a>
<a href="explorer:\\\\DESKTOP-9NVI47I\\temp\\кириллица">кириллица</a>
<a href="explorer:\\\\DESKTOP-9NVI47I\\temp\\файл-с-(кириллицей).txt">файл-с-(кириллицей).txt</a>


но ломается на такой
<a href="explorer:\\\\DESKTOP-9NVI47I\\temp\\один пробел">один пробел</a><br>


т.е. когда появляется пробел :/
При клике по данной ссылке возникает ошибка

5f9c68e435cdb229906778.png

и если продолжить выполнение, то будет следующее окно

5f9c68eb77f1f959166675.png

Вроде видно, что пробел обозначен как %20 , т.е. про энкодено, и готово к декоду со стороны скрипта

Если же немного поправить скрипт в реестре, сделал так чтобы вывелся готовый результат после всех преобразований ссылки

mshta javascript:new(ActiveXObject)('WScript.Shell').Run(alert(decodeURIComponent(escape('%1'.substr(9))))),window.close()


То будет следующий результат

5f9c69b6b9929214010027.png

Что выглядит более чем рабочий вроде как, если его выполнить

5f9c6a9c0da76576721723.png

то он успешно откроется :/ И тут я затрудняюсь понять, в чём может быть причина. Почему его не смущает кириллица, спец символы, и т.п., а об пробел он запнулся :///

Подскажите пожалуйста
  • Вопрос задан
  • 117 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Alex_At_Net
Обращайтесь, помогу - https://t.me/codecraft_phd
рискну предположить, что пробелы в WScript.Shell.Run играют такую же роль, какую они играют в cmd - разделение параметров коммандной строки. Попробуйте использовать кавычки для экранирвания, т.е.

mshta javascript:new(ActiveXObject)('WScript.Shell').Run('"'+decodeURIComponent(escape('%1'.substr(9)))+'"'),window.close()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы