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?

InformationsquelleAutor ElBel | 2009-03-10