#javascript #css #html #dojo
#javascript #css #HTML #dojo
Вопрос:
У меня есть одностраничное веб-приложение, которое использует DOJO (1.9.x). Обычно он загружает библиотеку DOJO из CDN Google, и мое приложение функционирует, как и ожидалось. Но некоторые клиенты предлагают ограниченное подключение к Интернету, которое исключает большую часть Интернета по соображениям безопасности (!?). Итак, я должен разместить библиотеку DOJO локально на сервере.
Чтобы это сработало, я должен указать URL-адрес на локальную копию dojo.js и соответствующие CSS-файлы. Поскольку изменяется только префикс URL-адреса, мне любопытно, есть ли способ добиться этого с помощью какого-либо внешнего файла CSS, чтобы URL-адрес в HTML получал свой префикс из этого небольшого CSS. Просто отредактировав / изменив этот небольшой файл CSS, один сайт загрузит DOJO из Google CDN, а другой загрузит локально размещенный DOJO.
Возможно ли это со статическим файлом CSS?
Комментарии:
1. Да? Вы хотите изменить часть URL-адреса с помощью CSS? Вы знаете, что означает CSS?
2. @Dimitri: Я не хочу редактировать HTML. JS является целью для загрузки. В качестве опции оставлен только CSS. Поскольку CSS настолько сложен, я подумал, что есть способ. Существуют такие хаки, как css.dzone.com/articles/executing-javascript-inside
Ответ №1:
Это невозможно с помощью CSS.
Несколько альтернатив в порядке предпочтения:
- САМЫЙ БЕЗОПАСНЫЙ — распространять две версии страницы / приложения, с локальным и удаленным dojo.
- Если у вас есть какой-либо рендеринг на стороне сервера, настройте его для обновления URL-адреса dojo.
- Всегда распространяйте загрузчик dojo вместе с вашим приложением. После этого загрузите модули dojo из CDN или локально в соответствии с вашей конфигурацией. Это может стать сложным.
Более подробная информация о варианте 3:
dojoConfig.js
//var dojoRoot = ".."; // For LOCAL builds - relative to dojo.js
var dojoRoot = "//ajax.googleapis.com/ajax/libs/dojo/1.9.3"; // For CDN builds
var dojoConfig = {
packages: [
// Depending on your project structure, you may need to
// insert entries here for your local packages.
// Here, we override the location for dojo packages
{
name: "dojo",
location: dojoRoot "/dojo"
},
{
name: "dojox",
location: dojoRoot "/dojox"
},
{
name: "dijit",
location: dojoRoot "/dijit"
}
]
};
Фрагмент HTML для его использования
<script src="dojoConfig.js"></script>
<script src="dojo/dojo.js"></script>
<script>
require(["dojo/_base/config", "dojo/json"], function(config, JSON) {
console.log(JSON.stringify(config.packages, null, "t"));
});
</script>