Подтвердить что ты не робот

Могу ли я сохранить javascript в локальном хранилище и запустить его?

Позвольте мне объяснить. Я разрабатываю приложение javascript, чтобы помочь людям разрабатывать веб-сайты. Я просто не понимаю, что он делает, просто знайте, что он работает, накладывая свой html/inline css-интерфейс на разрабатываемый веб-сайт и предлагая множество инструментов, таких как трассировка изображений и код minifiers.

Я храню его на сервере как .js файл. Все, что нужно сделать для доступа к моему приложению, - это скопировать и вставить на свою страницу небольшой фрагмент html, например:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="www.example.com/application.js">
<div class="application"></div>

Затем html и встроенный css интерфейса вставляются в div приложения, используя функцию jquery.html().

Все работает отлично.

Помимо одной вещи. Время загрузки. По мере того, как пользователь разрабатывает свой сайт, они будут постоянно обновлять свою страницу, и это приводит к тому, что им приходится ждать около 3 секунд (очень раздражает время) для загрузки интерфейса приложения.

Конечно, если кеш браузера включен, проблема исчезает, но если вы разрабатываете сайт, вы захотите отключить кеш-память! Это головоломка.

Затем я решил использовать локальные объекты хранилища для хранения строк интерфейса svg-графики, а затем .html() эти строки в inline css. Это полезное решение, но только разработчики будут использовать этот инструмент. Это не конечный пользователь. И это прекрасно работает, но дело в том, что браузеру все равно нужно загрузить script, чтобы узнать, как получить доступ к локально сохраненным изображениям! Скорость процессора не является узким местом, это пропускная способность.

Итак, я думал о сохранении самого script в локальном объекте хранилища и имел небольшую инициализацию script для его запуска.

Инициализация script будет просто извлекать script из локального объекта строковой привязки в виде строки, проанализировать ее соответственно и затем запустить.

Повторить мой вопрос, запустив его, это часть, которую я не могу сделать! Я могу вставить script на страницу через .html(script), но как я могу ее запустить?

4b9b3361

Ответ 1

При использовании eval(myScript) - самый прямой подход, я предпочитаю это:

var script = document.createElement('script');
script.src = 'data:text/javascript,' + encodeURI(myScript);
script.onload = function() {
  //optional callback
};
document.body.appendChild(script);

Это вставка фактического тега script с использованием uri данных в качестве источника. Таким образом, он появится под "сценариями" на вкладке ресурсов инструментов dev. Когда загружается script, будут выполняться данные uri (ваш код).

Ответ 3

Вам просто нужно использовать функцию JavaScript eval.

Вы можете написать что-то вроде следующего:

localStorage.myCode = "alert('just a test')";
eval(localStorage.myCode);

Вы можете проверить, сохранен ли ваш код следующим образом:

if (!localStorage.myCode) {
    // local storage code not exists, load from somewhere else
} else {
    // perform the eval using the code from local storage
}

Я тестировал этот код в Chrome и работал. Единственная проблема, которую я вижу, это то, что вы заставляете своих пользователей использовать только браузеры, поддерживающие локальное хранилище.

Вот поддержка браузера:

  • IE 8 +
  • FireFox 3.5 +
  • Safari 4 +
  • Chrome 4 +
  • Opera 10.5 +