views:

109

answers:

2

In chrome, safari, and opera setting the background image to an absolute reference such as: "/images/image.png" changes it to "http://sitepath/images/image.png".

It does not do this in firefox.

Is there any way to avoid this behavior, or is it written into the browser's javascript engine? Using jquery to set the background-image also does this problem.

The problem is that I am posting the HTML to a php script that needs the urls in this specific format. I know that setting the image path relative fixes this, but I can't do that.

The only other alternative would be to use a regexp. to convert the urls.

Thanks.

Test this in firefox, and chrome / webkit browser:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<html xmlns="http://www.w3.org/1999/xhtml"&gt;
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<div style="height:400px;width:400px;background-image:url(/images/images/logo.gif);">
</div>
<br />
<br />
<div id="test" style="height:400px;width:400px;">
</div>
<script type="text/javascript" src="/javascripts/jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $("#test").css('background-image',"url(/images/images/logo.gif)");
        alert(document.getElementById('test').style.backgroundImage);
    });
</script>
</body>
</html>
+1  A: 

Not sure exacly how you're putting that location into the document, but you can use window.location.hostname to get the domain and prepend that.

var bgImg = window.location.hostname + '/images/images/logo.gif';
$("#test").css('background-image', 'url('+bgImg+')';

You would replace /images/images/logo.gif with however you generate the image (server-side, I guess?)

DisgruntledGoat
A: 

A better approach would be to change classes on the item such that the new class changed the image to whatever you wanted. Something like:

$("#test").addClass("newClass");

This is a much cleaner approach that will degrade better and allow proper separation of concerns.

If you have to stick with changing inline CSS, you'll have to use an absolute reference to keep it the same in all browsers.

$("#test").css("background", "url(" + window.location.hostname + "/logo.gif");
sohtimsso1970