cómo previsualizar una imagen antes de subirla en varios navegadores

Quiero mostrar la vista previa de una imagen antes de que se cargue. He encontrado una solución parcial que funciona para ie6 y firefox, y aún no la he probado en ie7 o ie8. Pero quiero una solución que funcione en safari, ie7 y ie8 también. Aquí está la solución obtenida al combinar la solución ie6 y firefox:

function preview(what) {
if(jQuery.browser.msie) {
document.getElementById("preview-photo").src=what.value;
return;
}
else if(jQuery.browser.safari) {
document.getElementById("preview-photo").src=what.value;
return;
}
document.getElementById("preview-photo").src=what.files[0].getAsDataURL();
//  alert(jQuery("#preview-photo").height());
//  alert(jQuery("#preview-photo").width());
var h = jQuery("#preview-photo").height();  
var w = jQuery("#preview-photo").width();//assuming width is 68, and height is floating
if ((h > 68) || (w > 68)){
if (h > w){
jQuery("#preview-photo").css("height", "68px");
jQuery("#preview-photo").css("width", "auto");
}else {
jQuery("#preview-photo").css("width", "68px");
jQuery("#preview-photo").css("height", "auto");
}
}
}

La parte getAsDataURL () funciona en firefox, y la parte "src = what.value" funciona en ie6, pero ¿qué funcionaría en safari, y también funciona "src = what.value" en ie7 y ie8? Si no, ¿hay alguna solución que también funcione allí? Estaré feliz si puedo hacer que la vista previa de la imagen funcione en 5 o 6 navegadores. Si no es así, ¿es la única opción tener dos formularios con carga de imagen que parte de otro formulario?

Respuestas a la pregunta(5)

Su respuesta a la pregunta