Je comprends que compter sur Referer dans l'en-tête de demande n'est pas correct. Mais ma question est, pourquoi IE ne définit pas Referer sur l'en-tête de demande si j'utilise window.location
? Des pensées ou des corrections?
Cela ne définit pas Referer dans l'en-tête Request:
function load1() {
window.location = "https://" + serverURL + "/path/folder/page.aspx";
}
<a href="javascript:load1()">Link 1</a>
Alors que cela définit:
<a href="https://hardcode.server.url/path/folder/page.aspx">Link 1</a>
Le titre de votre message montre que vous souhaitez modifier la page actuelle par programmation en utilisant JavaScript mais en ayant toujours le référent HTTP fourni (d'après ce que j'ai compris, l'utilisation d'une balise <a>
Est juste pour un cas de test).
Vous devez être conscient des problèmes inter-navigateurs:
window.location.href
Sous les navigateurs suivants: window.location.href
(c'est pourquoi certaines pseudo-solutions sont basées sur myLink.click()
)click
n'existe pas (c'est pourquoi les pseudo-solutions basées sur myLink.click()
ne fonctionne pas)click
existe sous Firefox 5 mais ne change pas l'emplacement de la fenêtre, donc toutes les méthodes s'appuyant sur l'existence de la méthode myLink.click()
ne fonctionnera pas. Appeler myLink.onclick()
ou myLink.onClick()
déclenche une erreur ("onclick n'est pas une fonction"), donc solutions basées sur ces appels ne fonctionnera pas.Afin de gérer ces problèmes inter-navigateurs, j'utilise la méthode suivante:
function navigateToUrl(url) {
var f = document.createElement("FORM");
f.action = url;
var indexQM = url.indexOf("?");
if (indexQM>=0) {
// the URL has parameters => convert them to hidden form inputs
var params = url.substring(indexQM+1).split("&");
for (var i=0; i<params.length; i++) {
var keyValuePair = params[i].split("=");
var input = document.createElement("INPUT");
input.type="hidden";
input.name = keyValuePair[0];
input.value = keyValuePair[1];
f.appendChild(input);
}
}
document.body.appendChild(f);
f.submit();
}
navigateToUrl("http://foo.com/bar");
Cette solution fonctionne sur toutes les versions et versions de navigateur répertoriées ci-dessus. Il a l'avantage d'être simple, multi-navigateur et facile à comprendre. Notez que cela n'a pas été testé sous HTTP [~ # ~] s [~ # ~] .
Réglage window.location
n'est pas la même chose que de suivre un lien sur cette page. Il démarre une nouvelle demande pour la page comme si l'utilisateur avait tapé l'URL dans la barre d'adresse du navigateur.
J'ai réussi à trouver une solution de contournement:
function goTo(url)
{
var a = document.createElement("a");
if(!a.click) //for IE
{
window.location = url;
return;
}
a.setAttribute("href", url);
a.style.display = "none";
document.body.appendChild(a);
a.click();
}
Il crée un lien sur la page et simule un clic. Le résultat est un changement de window.location
et le référent est rempli.
http://ianso.blogspot.com/2006/01/referer-header-not-set-on-http.html
Je n'ai pas assez de points pour commenter la réponse d'Evan pour suggérer une correction donc tout ce que je peux faire est de poster la correction ici. En bref, document.createElement(a)
manque de guillemets et devrait être document.createElement("a")
à la place. Cela devrait également résoudre les inquiétudes de Kevin concernant FF5.
Toute la fonction telle que je l'ai écrite:
function goTo(url)
{
var a = document.createElement("a");
if (a.click)
{
// HTML5 browsers and IE support click() on <a>, early FF does not.
a.setAttribute("href", url);
a.style.display = "none";
document.body.appendChild(a);
a.click();
} else {
// Early FF can, however, use this usual method
// where IE cannot with secure links.
window.location = url;
}
}
Cela fonctionne dans notre environnement HTTPS avec IE7, IE8, FF3, FF7 et Chrome. J'imagine donc que cela fonctionne aussi en FF5. Sans cette solution de contournement, nous obtenons 403 erreurs dans IE7 et IE8 lors de la tentative de définition de window.location. En ce qui concerne la question de Sha Le pour savoir pourquoi IE fait cela, je ne peux que deviner, c'est qu'ils pensent que c'est trop peu sûr. J'ai eu un problème similaire avec window.open dans IE que je devais également contourner.
Est-il possible de déclencher un événement de clic d'un lien (ou de n'importe quel élément) via JavaScript? utilise une solution createEvent/dispatchEvent ou createEventObject/fireEvent.