2012-07-26 5 views
6

Ich habe ein paar , die (mit dem Attribut src) mit domainübergreifenden URLs verknüpft sind, die möglicherweise auf eine andere Bild-URL umgeleitet werden müssen. Ich muss irgendwie jede Umleitung verfolgen, die stattfindet, wenn der Browser die ursprüngliche URL anfordert.Wie wird nach Statuscodes für 301/302 Redirects bei domänenübergreifenden Bildanforderungen gesucht?

So zum Beispiel, wenn ich haben:

<img src='http://www.something.com/redirect'/>

und http://www.something.com/redirect einen benutzerdefinierten location Header http://something.com/pic.jpg gesendet, muss ich es wissen. Wie kann ich eine Umleitung in JS oder jQuery auf einer erkennen?

+0

Sie können dies nicht mit normalem Javascript tun. Sie benötigen eine Erweiterung oder ein Plugin. (Es ist wahrscheinlich mit einem Userscript möglich, aber ich habe keine Lust, es gleich zu überprüfen). Was ist der wahre Zweck dieser Übung? (Die Mittel können nicht funktionieren, aber der Wahnsinn könnte noch erreicht werden.) –

+1

Ohne Server - unmöglich. Mit Server - trivial. Treffen Sie Ihre Wahl: P – Esailija

+0

Das ist nur @Esailija, ich kann nicht serverseitige Skripte verwenden, um die Anfragen zu erledigen. Ich brauche sie auf dem Client-Rechner, unter Verwendung der Clients IP und Cookies. Warum? Da einige der URLs möglicherweise mit einer Site verknüpft sind, für die bestimmte Cookies erforderlich sind, die auf dem Clientcomputer installiert werden. Und ich kann diese Cookies offensichtlich nicht vom Client holen, wenn sie zu einer anderen Domäne gehören (auf die ich auch keine Kontrolle habe). Wenn nur domainübergreifendes 'AJAX' erlaubt war. Schade. –

Antwort

1

Wenn Sie sich nicht auf IE7 gezwungen Sie verwenden könnte Kors Lösung. Dadurch können Sie domänenübergreifend ohne die Einschränkungen von JSON-P anfordern (d. H. Sie können Statuscodes erhalten).

Weitere Informationen finden Sie unter https://developer.mozilla.org/en/http_access_control. Für eine einfache GET-Anfrage sollten Sie in Ordnung sein, aber wenn Sie POST benötigen, müssen Sie möglicherweise Ihre Anfrage überprüfen.

1

Ich glaube nicht, dass das möglich ist (natürlich bin ich kein Experte, aber das ist AFAIK), zumindest nicht so geradlinig wie man meinen könnte.

Hier ist, was ich denke, so nah wie Sie bekommen, was Sie suchen, ich hoffe, dass es Ihnen ein paar Ideen

var req = new XMLHttpRequest(); 
$('img').each(function() { 
    req.open('GET', $(this).prop('src'), false); 
    req.send(null); 
    alert(req.status); 
}); 

Zwei Seiten nach unten gibt:

  1. Nur für Bilder auf derselben Domain.
  2. Sie haben die Bilder zweimal verlangen (oder Sie die Anfragen zuerst tun, dann die Ergebnisse verwenden, um die Bilder zu zeigen)
1
<script type="text/javascript" src="jquery-1.7.1.min.js"></script> 
<img id='img' src='' width='200' /> 
<script type='text/javascript'> 

/* our image */ 
var image = new Image(); 
$(image).load('yourimage.png', function(response, status, xhr) { 
    if (xhr.status == 200) { 
     // image loaded, now display the image 
     $('#img').attr('src','yourimage.png') 
    } else { 
     alert(xhr.status); 
    } 
}); 

</script> 
+1

Dies funktioniert jedoch nicht für Cross-Domains. –

+0

Konnte nicht die Code-Server-Seite des Image-Abrufs verschieben (so würde Ihre img src http://example.com/imagefetch.php?url=http://www.something.com/redirect und Ihre imagefetch.php-Seite werden würde etwas wie cURL verwenden, um das Remote-Image zu holen und die Weiterleitungen zu verfolgen (übrigens keine Idee, wenn cURL das kann, aber Sie bekommen die Idee). Es gibt viele Gründe, warum dies eine schlechte Idee ist, aber Wenn Sie es erreichen müssten, könnte dies funktionieren –

+0

Ich möchte nicht wirklich Server-Seite für diese einfache, aber fast unmögliche Aufgabe verwenden. Aber danke für den Vorschlag. –

0

Wie wäre es mit Ajax nach dem Bild, ungetestet Pseudocode zu laden:

HTML:

<img id="img1" src="blank.gif"> 

JQuery:

GetImage("http://www.something.com/redirect"); 

function GetImage(url) 
{ 
    $.ajax({ 
     type: "GET", 
     url: url, 
     success: function(data, textStatus) { 
      if (data.redirect) { 
       // data.redirect contains the string URL to redirect to 
       ProcessLocationHeader(data); 
       GetImage(data.redirect); 
      } 
      else { 
       // No redirect means we have the correct image 
       $("#img1").src = url; 
      } 
     } 
    }); 
} 

Da der Browser das Bild, um es gewonnen wird cachen‘ t vom Server twize geladen werden.

+0

Das geht nicht Rk mit Cross-Domains obwohl. –

+0

Hmm..ich denke ich habe die Frage nicht richtig verstanden. –

Verwandte Themen