BASE HREF, javascript, et Internet Explorer vs Firefox
Question:
IE et Firefox /Safari semblent traiter différemment BASE HREF Javascript et la fenêtre.type d'emplacement demandes. Tout d'abord, est-ce une description précise du problème? Ce qui se passe? Et quelle est la meilleure solution de navigateur pour faire face à cette situation?
Contexte:
J'ai un petit PHP fichier plat sitelet (c'est en fait un test d'utilisabilité prototype).
Je générer dynamiquement la BASE de la balise HREF valeur en PHP, c'est à dire si elle est exécutée sur notre serveur, c'est:
$basehref = 'http://www.example.com/alpha/bravo/UsabilityTest/';
et sur mon local dev machine, c'est:
$basehref = 'http://ellen.local/delta/echo/foxtrot/UsabilityTest/';
À l'une des tâches, je recueille quelques entrées d'utilisateur, de faire quelques transformations sur en Javascript, et de l'envoyer au serveur à l'aide d'un code comme ceci:
function allDone() {
//elided code for simplicity of stackoverflow question
var URI = "ProcessUserInput.php?";
URI = URI + "alphakeys=" + encodeURI( keys.join(",") );
URI = URI + "&sortedvalues=" + encodeURI( values.join(",") );
window.location = URI;
}
Fois le fichier javascript (contenant la fonction allDone()) et le traitement de script PHP (ProcessUserInput.php) vivent dans un sous-répertoire de UsabilityTest. En d'autres termes, l'URL est
http://www.example.com/alpha/bravo/UsabilityTest/foxtrot/ProcessUserInput.php
aka
$basehref . '/foxtrot/ProcessUserInput.php'
Le Problème
IE JavaScript fondamentalement semble ignorer la BASE de HREF. Le javascript et le PHP processeur vivre dans le même répertoire, donc l'appel ProcessUserInput.php fonctionne bien. L'entrée est traitée et tout fonctionne bien.
Mais quand je l'ai tester sur Firefox, JavaScript ne à utiliser la BASE de HREF, parce que le script de sortie est envoyée à
$basehref . '/ProcessUserInput.php'
Cette pauses, parce que ProcessUserInput.php est dans un sous-répertoire de basehref. Cependant, si j'ajoute le nom de sous-répertoire pour le javascript, il ne fonctionne plus sous IE.
Solutions?
Je ne peux penser à quelques méthodes pour résoudre ce problème:
- En Javascript, lire HREF propriété de la BASE de la balise et manuellement ajouter
var URI
dans le javascript, l'appel d'une entièrement résolu URL absolue - Processus de la .js fichier avec PHP et insérez le
$basehref
variable dans le script - Déplacer les fichiers
- Quelque chose d'autre?
Je suis sûr qu'il y a d'autres façons de résoudre ce trop. Quelle est la meilleure façon de traiter avec la BASE HREF JavaScript quand IE et Firefox appliquer différemment en JavaScript?
Vous devez vous connecter pour publier un commentaire.
À l'aide de la
assign
méthode de la fenêtre.l'emplacement semble être la plus simple de répondre.Au lieu de
Je suis en utilisant ceci:
qui est en train de faire la bonne chose dans IE et Firefox.
Oui, c'est un de longue date de la différence de revenir aux premiers jours de Netscape-vs-IE.
IE applique de base href uniquement au point d'un élément de document est interagi avec. Ainsi, vous pouvez
createElement('a')
, définir un par rapporthref
etclick()
il*, mais la base href sera ignorée; appendChild le document contenant la base href, et ça marchera.Sur les autres navigateurs la base href est pris comme global par la fenêtre et toujours appliqué. Ce qui est juste? Il semble être spécifiée. L'original JavaScript docs seulement dire que
location.hash
(et donc,location
appliquée comme une chaîne de caractères):Paramètre à une URL relative semble être une indéfini de l'opération.
(*: lien.cliquez sur() est une méthode non-standard pris en charge par IE et Opera)
Probablement ce que je ferais, oui, si vous êtes morts ensemble sur l'utilisation de <base>.
Je crois que vous souhaitez modifier fenêtre.emplacement.chemin d'accès, pas de la fenêtre.emplacement. de la fenêtre.l'emplacement est un Emplacement d'objet, qui a de multiples variables. En conséquence, les effets de l'évolution, il n'est pas bien défini. Cependant, fenêtre.emplacement.chemin d'accès est défini comme le chemin d'accès par rapport à l'hôte, qui est ce que vous voulez.
Si vous voulez en savoir plus sur les nombreuses variables que vous pouvez modifier dans la fenêtre.l'emplacement, j'aimerais vérifier ici. Selon Mozilla, la documentation, la modification de la variable dans la fenêtre.l'emplacement doit recharger la page avec une URL correspondant à ces changements.
J'ai eu le même problème aujourd'hui, après quelques recherches, couldnt findn aucune façon à remplacer cette question dans IE9, ce qui est un requiremente pour mon projet, j'ai donc fait la démarche suivante (jquery, mais son vraiment facile de le faire en javascript simple).
Et puis, changement
à
juste ajouter
$('base').attr('href')
avant le lien. (à l'aide de jquery) ouVous pouvez toujours utiliser la Vanille JS 🙂
J'espère que cette aide.