5568 sujets

Sémantique web et HTML

Bonjour

Un problème qui semble du soit à un bug Mozilla, soit à une incompréhension de ma part. Voilà une version simplifiée, car dans la réalité c'est bien plus complexe. J'ai une page test5_A.html qui contient une icone : une flèche de navigation vers l'avant, soit le fichier test5.svg. Je paramètre le lien dans ce fichier en utilisant un attribut <param> sur la balise <object> qui affiche le svg. Le lien pointe sur une autre page test5_B.html.

Voici les fichiers.
test5.svg

<?xml version="1.0" encoding="UTF-8"?>
<svg width="100" height="100" 
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  onload="gerer()">

  <script type="text/ecmascript"><![CDATA[
  function gerer()
  {
    var href ;
    var params = document.defaultView.frameElement.getElementsByTagName('param') ;
	  for (var p in params) if (params[p].name == 'lien') href = params[p].value;
	  if (href != null) 
	    document.getElementById('zoneCliquable').setAttribute('xlink:href', href);
  }
  ]]></script>

  <g display="block" stroke="#f00" stroke-width="8.0">
     <path fill= "none" 
           d="M 80,50 L 20,20 20,80 z" />
     <a id="zoneCliquable" xlink:href="erreur.html" target="_top">
       <rect x="10" y="10" width="80" height="80"
             stroke="none" fill="red" fill-opacity="0.05" />
     </a>
 	   <set attributeName="stroke" from="#f00" to="#c00" begin="mouseover" end="mouseout" />
  </g>
</svg>

test5_A.html

<!DOCTYPE HTML>
<html>
	<head><meta http-equiv="Content-Type" content="string; charset=UTF-8"></head>
	<body>
    <h1>Page A</h1><br>
    <object id = "testId" data="test5.svg" type="image/svg+xml"
            style="display:block">
      <param name="lien" value="test5_B.html">
    </object>
	</body>
</html>


test5_B.html

<!DOCTYPE HTML>
<html>
	<head><meta http-equiv="Content-Type" content="string; charset=UTF-8"></head>
	<body>
    <h1>Page B</h1>
	</body>
</html>


Si je pose ces trois fichiers dans le même répertoire, et que je charge test5_A.html, j'obtiens bien mon icone, elle est dynamique (onMouseOver) et lorsque je clique, on va sur test5_B.html. Jusque là, comme disait le mec tombant du 20° étage et arrivant au 10°, tout va bien. Mais si j'ai l'idée saugrenue d'organiser mes fichiers, que me mets les pages html dans un répertoire main/pages, le fichier svg dans un répertoire main/icones, en rectifiant le nom du fichier svg dans la balise object : data="../icones/test5.svg", alors là, gros problème. Je tombe sur une exception de sécurité de Firefox. Apparemment, il considère que le retour arrière "../" est une violation de sa stratégie de sécurité, et il l'interdit. L'instruction qui plante dans le svg est :

    var params = document.defaultView.frameElement.getElementsByTagName('param') ;


J'ai cherché là dedans :

http://www.mozilla.org/projects/security/components/ConfigPolicy.html
https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript?redirectlocale=en-US&redirectslug=Same_origin_policy_for_JavaScript

Mais si je sens bien que là est l'origine de mon problème, je ne trouve pas la solution. Bien sur, je pourrais réorganiser mes fichiers (il y en a un paquet) en mettant tout à plat, ou encore les icones en sous-répertoire du répertoire qui contient les pages, mais cela ne me plait pas. Quelqu'un a déjà rencontré ça et peut suggérer une solution ?
Modifié par JiPe38 (16 Mar 2013 - 18:56)
J'avance, et je pense avoir trouvé la réponse. C'est bien le problème "same origin policy" qui fait que Firefox se comporte comme ça. En fait, ils ont semble t-il interprété de manière plus restrictive que les copains les recommandations (fort lâches) du W3C.

L'explication la plus détaillée, avec comparaison des différents navigateurs est là :

http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy

En cherchant bien, chez FF on trouve :

https://developer.mozilla.org/en-US/docs/Same-origin_policy_for_file:_URIs
http://kb.mozillazine.org/Security.fileuri.strict_origin_policy

Conclusions :

Le problème ne se pose que sur une navigation localhost (file://), pas sur un serveur http disposant d'un nom de domaine connu du DNS

On peut le résoudre soit en mettant (dans mon cas) les fichiers svg dans le même répertoire que les pages ou dans un sous-répertoire.

On peut le contourner, sur une machine donnée, en configurant son firefox pour qu'il laisse passer la navigation sur tout un support file:///X: (second lien).

Problème résolu. Enfin, j'espère. Désolé d'avoir fait perdre du temps à ceux qui auraient cherché, comme moi.

Et j'oubliais de le préciser : dans ma page test5_A.html, il faut mettre le lien :

<param name="lien" value="../pages/test5_B.html">

Modifié par JiPe38 (16 Mar 2013 - 19:15)