При работе с web-страницами часто возникает желание подправить интерфейс для более удобной работы. Для этого используются редакторы браузерных скриптов типа Tampermonkey. Неудобство их использования состоит в невозможности одновременного редактирования кода скрипта и просмотра изменений на странице. Мы это исправим и создадим редактор в окне диалога, дополнив его ещё одной крайне удобной функцией.
Для редактирования разметки страницы и просмотра изменений используется инструмент разработчика в браузере. Среди его возможностей есть сохранение изменений в локальной копии страницы. Но для этого нужно настроить локальную среду разработки.
При помощи редакторов, внешних сред разработки, LivePreview или средства автоматизации Auto Hotkey можно создать систему, которая позволит в реальном времени вносить изменения в страницы на сервере и видеть их в браузере. Но для этого необходимо расположить рядом два окна - редактора и браузера или использовать два монитора.
А можно ли сделать так, чтобы на одном экране видеть и редактор кода, и страницу? К сожалению, из-за злоупотреблений всплывающими окнами из браузеров была исключена функция, создающая модальные окна. Окно можно создать при помощи window.open, но для вывода его на передний план после каждой потери фокуса придётся вызывать метод focus. В результате будет постоянное "мерцание" на экране от скрытия и отображения этого окна. Выходом является использование диалога на элементе DIV, например, диалог jQuery.
После внесения правки, код "заплатки" нужно сохранить так, чтобы при последующих открытиях страницы он автоматически подгружался. Для этого будем сохранять код в локальном хранилище localStorage и выполнять его, если установлен флажок "автозагрузка".
Для просмотра изменений страницы в реальном времени выполнение кода (и его сохранение в хранилище) будем производить при возникновении события отпускания клавиши в поле редактора CodeMirror.
Если на web-странице уже работает какая-то версия jQuery и Dialog, то может возникнуть конфликт версий. Для устранения этого используем метод jQuery.noConflict(true), а стили диалога можно подправить после его создания. Сам диалог вызывается при нажатии не использующегося в браузере сочетания горячих клавиш, например, Ctrl + Shift + 5.
Полный набросок программы показан ниже.
К недостатку Скриптлатки можно отнести то, что изменение структуры страницы будет происходить после формирования интерфейса, в результате чего пользователь сначала увидит исходный интерфейс, а затем изменённый. Например, если в исходном интерфейсе есть изображения, которые мы не хотим видеть, то на мгновения они отобразятся, а затем сработает код скрипта для их скрытия. Но в этом и состоит суть "заплатки", когда она "пришивается" к сформировавшейся странице. Скриптлатку можно использовать для отладки своих страниц: правим их код в браузере, а после отладки копируем в код страницы.
Что можно здесь ещё придумать? Например, отображение при активном флажке кнопки в виде пиктограммы на страницах, что к ней применен модифицирующий код. В этом случае можно будет нажать на кнопку для отображения диалога редактора.