Avatar billede pagh80 Nybegynder
18. februar 2013 - 18:14 Der er 9 kommentarer og
1 løsning

check for 302 redirect eller lignene

Hej jeg har en lille html side som henter thumbnails fra en server på et andet domain, og viser dem i et galleri.

Helt overordnet er det eneste jeg ønsker blot at finde ud af om jeg modtager et thumbnail eller ej i mit javascript(eller php), fra en server på et andet domain som jeg ikke styrer.

Alle thumbnails i et givent galleri er listet på serveren som http://www.hej/pic1.jpg, http://www.hej/pic2.jpg osv.
Dvs jeg kender stien men ikke mængden af thumbnails hvert galleri indeholder.
Er der en måde hvor jeg kan tjekke at jeg er nået igennem alle thumbnails så jeg ikke behøver at tjekke f.eks 20 billeder(pic1 - pic20) hvis der kun er 5.

Jeg har læst man kan bruge XMLHttpRequest, men jeg har også læst at når det kommer til forskellige domæner er det pga sikkerhed meget begrænset hvad man kan få lov til at foretage sig:
http://en.wikipedia.org/wiki/Same_origin_policy
Avatar billede olebole Juniormester
18. februar 2013 - 18:34 #1
<ole>

Sikkerheden omkring XMLHttpRequest objektet har intet med dette at gøre. Du har naturligvis ikke mulighed for at se, hvad en mappe på et fremmed domæne indeholder.

Du kan kun prøve at tilgå de enkelte billeder og se, om du får en passende response

/mvh
</bole>
Avatar billede pagh80 Nybegynder
18. februar 2013 - 18:51 #2
Jeg tænkte bare om jeg fra mit response kan se om der er et billede eller ej, så jeg ikke behøver at prøve at tilgå flere billeder.
Avatar billede olebole Juniormester
18. februar 2013 - 19:08 #3
Hvordan henter du billederne?
Avatar billede pagh80 Nybegynder
18. februar 2013 - 19:33 #4
skriver stien til billedet jeg kender, og håber den er der, når jeg indsætter den i min tabel.

eksempel:

var table = document.getElementById('deviTable');
//get the number of rows currently in the table
var numRows = table.rows.length;
//insert a new row at the bottom
var newRow = table.insertRow(numRows);
var newCell = newRow.insertCell(0);
newCell.innerHTML = http://www.hej.dk/pic1.jpg




her er koden:(thumbnails linker til de aktuelle billeder på serveren, og der er 5*5 = 25 billeder i hvert galleri går jeg ud fra.)

function addGallery(deviLink, gNumber){
  //get the table
  var counter=1;
    var index=deviLink.lastIndexOf("/");
    if(index > 0)
    {
        var table = document.getElementById('deviTable');
        var temp;
          //create 5 new rows
      for (var j=1;j<=5;j++)
        {
        //get the number of rows currently in the table
          var numRows = table.rows.length;
            //insert a new row at the bottom
          var newRow = table.insertRow(numRows);
        //create 5 new cells
          for (var i=1;i<=5;i++)
            {
              var newCell = newRow.insertCell(i-1);
              newCell.innerHTML = "<a href='"+deviLink.substring(0, index+1)+deviLink.substring(index+1, index+3)+gNumber+"pic"+counter+".jpg"+"' target='_blank'><img src='"+deviLink.substring(0, index+1) + "thumb" + deviLink.substring(index+1, index+3)+gNumber+"pic"+counter+".jpg"+"' /></a>";
                    }
                    counter++;
            }
        }
    }
else
    return deviLink;
}
Avatar billede olebole Juniormester
18. februar 2013 - 19:44 #5
Det bliver let noget sløvt noget. Kan du ikke prøve at tale med indehaveren af det andet site og høre, om ikke vedkommende kan lægge et script, som udskriver antallet af filer i mappen? Så kan du tilgå det og få returneret det præcise tal
Avatar billede pagh80 Nybegynder
18. februar 2013 - 21:04 #6
Det var en hård nød at knække men jeg tror jeg har løsningen nu.

Det her lille script tjekker om det billede som loades findes eller ej. hvis det findes kommer det ud på skærmen, og hvis det ikke gør smider det et onerror event som jeg nok godt kan bruge til at finde ud af hvor stort galleriet skal være, og derved stoppe min for løkke som genererer galleri-tabellen.
Jeg har dog ikke tjekket om det vil gøre det hele meget langsomt

Her er det simple eksempel:

<script>
function testImage()
{
    var img1 = document.getElementById('deviLink').value;
    checkImage(img1);
}

function checkImage(src) {
  var img = new Image();
  var imgdiv = document.getElementById('image-test');
 
  img.onload = function() {
  imgdiv.innerHTML = "<img src='"+img.src+"' />";
  };
  img.onerror = function() {
    // doesn't exist or error loading
    alert('no image');
  };

  img.src = src; // fires off loading of image
}
</script>
</head>

<body>
<div id="image-test" style="width: 300px; height:300px;"></div>
link: <input type="text" style="width:600px" name="deviLink" id="deviLink"><br>
<button type="button" onclick="testImage()">test</button>

</body>
Avatar billede olebole Juniormester
18. februar 2013 - 22:55 #7
Ja, og det var præcis dén løsning, jeg havde i tankerne - og som jeg synes er noget sløvt/kluntet skod.

Den elegante løsning er at bede domæneejeren om at lægge et script, som beskrevet ovenfor
Avatar billede pagh80 Nybegynder
18. februar 2013 - 23:31 #8
Det har du ret i. Smid et svar så du kan få dine point som tak for hjælpen.
Avatar billede olebole Juniormester
18. februar 2013 - 23:36 #9
Ellers tak, jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)
Avatar billede pagh80 Nybegynder
19. februar 2013 - 00:21 #10
ok så
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester