måndag 5 mars 2012

Tvinga Web-läsare att ge alternativ spara eller visa. ASP.NET

På min site ville jag att besökarna skulle kunna ladda ner PDF-filer. När jag länkade direkt till filen, visade Web-läsaren den utan att ge alternativet att spara. Visserligen går det att höger-klicka på länken och där välja att spara, men det är långt i från alla som vet detta och jag ville därför hitta en lösning där läsaren inte direkt laddade filen, utan först gav alternativen ”Spara”, ”Spara som” och ”Visa”. Efter mycket letande hittade jag till slut en lösning i VB som jag lyckades att inplementera. Samma författare hade en lösning i C# också, men den fick jag inte att fungera.
Lösning bygger på att man för varje fil i fråga, skapar en unik aspx-sida där man sätter in koden. I koden skriver man filnamn och sökväg för den fil det handlar om, i övrigt är filen tom bortsett från standardinfo (se exempel nedan)


Sedan döper man aspx-filen lämpligtvis till samma namn som den fil man vill ladda ner (det är av rent praktiska skäl, man kan döpa den till vad man vill men det måste vara en .aspx). I exemplet ovan så heter den fil som ska laddas ner, ”minpdffil.pdf”, så jag döper därför aspx-filen till ”minpdffil.aspx”.
Sista steget blir sedan att styra länkarn till ”minpdffil.pdf”, et voilà, när man klickar på länken får man alternativen jag inledningsvis sökte efter !
Ovanstående fungerar utmärkt på alla datorbaserade webläsare jag provat (IE, Chrome, Firefox Safari) MEN inte på min iPhone. Där dyker det i stället upp en massa obegriplig kod. Det visade sig att det enda sättet att få det att fungera där var att länka direkt till PDF-filen (i exemplet ovan ”minpdffil.pdf”). Detta löste jag genom att lägga in lite javascript i vilken känner av om sökningen är från en mobil devis och i så fall styr om till valfri plats, i detta fall direkt till PDF-filen. Nedan hittar du 2 koder. Den första är en generisk kod för alla mobila enheter, mendan den andra är specifikt för iPhone. För säkerhetsskull har jag lagt in bägge scripten.

Inga kommentarer: