Есть ли способ загрузить локальный JS файл динамически?

В целях разработки я хотел бы иметь возможность легко загружать локально хранимые скрипты в браузер вместо необходимости скопировать-вставить на консоль.

Создание нового элемента <script> не работает, оно дает ошибку Not allowed to load local resource: file://.... (в Chrome).

Кроме того, создание usercript не будет работать - я должен будет переустанавливать его каждый раз, когда я делаю редактирование.

Есть ли альтернативный способ легко загрузить локальный script через букмарклет/etc?

Ответ 1

В Chrome вы можете создать расширение, содержащее все локальные файлы, которые необходимо загрузить. Это сделает ваши файлы доступными через chrome-extension://... вместо file://...

Сделайте файл с именем manifest.json в новой папке и заполните его:

{
  "name": "File holder",
  "manifest_version": 2,
  "version": "1.0",
  "web_accessible_resources": ["test.js", "other.js", "yetanother.js"]
}

Затем поместите все сценарии, которые вы хотите загрузить в этом новом каталоге, и убедитесь, что они включены в список манифеста web_accessbile_reources. Загрузите расширение, перейдя на chrome://extensions, включив Developer Mode и выбрав новую папку с помощью Load unpacked extension....

Теперь вы можете получить доступ ко всем файлам в вашем каталоге расширений с помощью chrome-extension://[app_id]/[file_name], где "app_id" - это хэш, указанный для расширения на странице chrome://extensions. Обратите внимание, что поскольку протоколы и имена хостов отличаются от того, где вы делаете свою фактическую работу (если вы не решите сделать все свое развитие в папке расширения, что может быть приемлемо для вас), ресурсы расширения являются междоменными и могут быть только загружается через тег <script>.

Теперь с консоли вы можете:

var s = document.createElement("script");
s.src = "chrome-extension://aefigdoelbemgaedgkcjpcnilbgagpcn/test.js";
document.body.appendChild(s);

(Предположим, что ваш файл test.js, а ваш идентификатор приложения aefigdoelbemgaedgkcjpcnilbgagpcn.)

Это немного печатать, я знаю, но, возможно, вы можете сохранить часть chrome-extension://[app_id] как сокращенную переменную?

Ответ 3

Вы пробовали относительный путь от своей страницы к файлу js liek, поэтому...

src= '/JS/javascript.js'