Hoy uno de los clientes, nos ha solicitado que los adjuntos que se suben a una lista de SharePoint, se debieran abrir en una nueva pestaña y no sobre la misma.
La razón es porque todo tenemos la costumbre de leer y tras leer cerrar. Con lo cual en este caso perdemos la ventana.
Analizando desde el navegador el código que nos devuelve el navegador, vemos que tenemos:
<div class=AttachmentsNews id=idAttachmentsRow>
<div>
<table id=idAttachmentsTable border=0 cellSpacing=0 cellPadding=0>
<tbody>
<tr id={8529BEC4-786B-4ED2-846E-01D994333894}>
<td class=ms-vb>
<span dir=ltr>
<a tabIndex="1" onmousedown="return VerifyHref(this, event, '1', null, '');return false;" onclick="DispDocItemExWithServerRedirect(this, event, 'false', 'false', 'false', '', '1', '');return false;" href="/communication/Lists/Communiqus/Attachments/8/Documento.pdf">Documento.pdf</a>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
Tras ver que no habría una sobrecarga del componente que nos hiciera que su funcionamiento fuese el de apertura en una nueva pestaña.
La solución que se nos ocurrió fue, que como teníamos personalizados los DispForm, por medio de XSL, fue la de añadir código Jquery que nos lo resolviera:
<script type="text/javascript">
$(document).ready(function(){
//Recojo todos los enlaces de adjuntos para hacer que se abran en ventana nueva
elements = $("#idAttachmentsRow a");
//Tratamos cada uno de los elementos
$(elements).each(function(){
//Borro el onclick que viene por defecto
$(this).attr("onclick"," ");
//Le indico que se abra en ventana nueva
$(this).attr("target","_blank");
});
});
</script>
Y así el elemento toma el siguiente código:
<a tabIndex=1 onmousedown="return VerifyHref(this, event, '1', null, '');return false;" onclick=" " href="/communication/Lists/Communiqus/Attachments/8/Documento.pdf" target=_blank>Documento.pdf</a>
Hoy no pongo referencia, porque se me ocurrió en un momento de inspiración, pero seguro que alguien más lo ha resuelto así o de una manera más elegante.