Ответ 1
Mutable paths (тестовые/промежуточные/производственные домены) всегда являются проблемой в javascript, лучшим вариантом является включение корневого пути вашего приложения/веб-сайта в HTML. Очевидное место для этого - в вашем шаблоне. Например:
<body data-root="${rootContext}">
<!-- or whatever syntax your template layer uses -->
И возьмите его с помощью javascript для использования в ваших скриптах.
var rootContext = document.body.getAttribute("data-root");
Примечание. Вы можете сделать это только тогда, когда DOM готов (или когда document.body доступен, отличается кросс-браузер);)
Альтернатива и, на мой взгляд, менее привлекательный вариант - просто визуализировать javascript.
<script>
var rootContext = ${rootContext} // or whatever syntax your template layer uses.
</script>
По крайней мере, с помощью метода "data-root" вы можете сохранить значение везде, где хотите, и избегать глобального определения.
Итак, в коде, где вы ссылаетесь на изображение, вы можете сделать следующее:
img.src = rootContext + "/media/js/close.gif";
Или создайте хороший вспомогательный метод:
// lets use a namespace to avoid globals.
var myApp = {
// still need to set this when DOM/body is ready
rootContext: document.body.getAttribute("data-root"),
getContext: function( src ) {
return this.rootContext + src;
}
}
img.src = myApp.getContext( "/media/js/close.gif" );
В вспомогательном методе вы также можете написать код для обеспечения правильного использования/и еще чего-то.