Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как получить путь до файла из css в firefox? (https://javascript.ru/forum/events/28197-kak-poluchit-put-do-fajjla-iz-css-v-firefox.html)

wild_snail 10.05.2012 22:44

Как получить путь до файла из css в firefox?
 
<style>
background:url(images/temp0.png);
</style>
<div class="myDiv">1</div>


$(document).ready(function(){
	$('div').each(function(){
                      alert($(this).css('backgroundImage'))
	})
})


Если путь до картинки правильный, то все норм, но если путь не правильный в ff показывает 'none', в то время как все остальные браузеры отображают именно то, что прописано в css. Кто-нибудь знает как заставить отображать в ff путь до картинки, даже если он не правильный?

Gvozd 11.05.2012 00:58

Попробовал по всякому.
Нифига.Все способы выдают none, либо пустую строку

Исключительно ради академического интереса, родилось решение которое я приведу ниже.
Предупреждение!!!
Его НИ В КОЕМ СЛУЧАЕ нельзя использовать, и оно написано только ради лулзов.
Оно ОЧЕНЬ медленное.
Потому что заключается в том, что для каждого дива проверяются ВСЕ CSS-правила, объявленные в подключаемых CSS-файлах, тегах STYLE, и импортируемых стилях
А это очень много правил на обычном сайте, так что это очень неоптимизированная операция.
К тому же данная функция возвращает массив всех фонов, ко торые подходят для данного элемента, и не делается проверки, кто из них более приоритетен.
Итак, JUST FOR LULZ
<style>
@import url("http://fonts.googleapis.com/css?family=Gorditas");
div {
	background:url(asdasdas.png);
}

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
	$('div').each(function(){
		var backgrounds = checkCss(document.styleSheets, this);
		console.log(backgrounds);
	})
})
function checkCss(sheets, element) {
	var result = [];
	$(sheets).each(function(i, el) {
		try {
			$(el.cssRules).each(function(j, el2){
				if(el2.styleSheet) {//Импортированные стили
					result.concat(checkCss([el2.styleSheet]));
				} else {
					if($(element).is(el2.selectorText)) {
						result.push(el2.style.backgroundImage);
					}
				}
			});
		} catch(e) {
			console.log('security error', el, e);
		}
	});
	return result;
}
</script>
<div>
qwe
</div>

melky 11.05.2012 09:36

Gvozd, что я делаю не так ?
<style>
div {
	background:url(asdasdas.png);
}
</style>
<div></div>
<script>
var div = document.getElementsByTagName('div')[0];
var computed = window.getComputedStyle(div, null);
var val = computed.getPropertyValue("background-image");
document.write(val);
</script>

Gvozd 11.05.2012 13:03

Цитата:

Сообщение от melky
Gvozd, что я делаю не так ?

Очевидно, что ты тестировал запуская файл по HTTP, а я же запускал прямо с рабочего стола.
Как оказалось, именно при запуске с файловой системы FireFox и ведет себя пакостно.
wild_snail,
ну, вы слышали, собственно - тестируйте JS из-под веб-сервера, а не из файловой системы.
Браузеры в связи со своими правилами безопасности ведут себя из файловой системы не так же, как из-под веб-сервера.
<style>
div{
background:url(images/temp0.png);
}
</style>
<div class="myDiv">1</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$(document).ready(function(){
	$('div').each(function(){
                      alert($(this).css('backgroundImage'))
	})
})
</script>

wild_snail 11.05.2012 21:09

Спасибо, очень помогли!


Часовой пояс GMT +3, время: 22:18.