2010-04-03 13 views
2

J'ai développé une application qui a une liste d'éléments dans une image; quand on clique sur un élément, il fait quelque chose dans un autre cadre (charge une image).Comment appeler une fonction JavaScript d'une image à une autre dans Chrome/Webkit avec le protocole de fichier

Cela fonctionnait normalement dans tous les navigateurs, y compris Chrome 3; maintenant il fonctionne toujours très bien dans Firefox, mais dans les versions récentes de Chrome (je crois depuis le 4), il jette cette erreur:

« caractéristique »

Unsafe JavaScript attempt to access frame with URL (...) from frame with URL (...). Domains, protocols and ports must match.

Ceci est évidemment une sécurité, mais est-il possible de la contourner?

Voici un test simple:

index.html:

<html> 
    <frameset cols="50%,50%"> 
    <frame src="left.html" name="left"/> 
    <frame src="right.html" name="right"/> 
    </frameset> 
    </html> 

left.html:

<html> 
    <body> 
    <a href="javascript:parent.right.test('hello');">click me</a> 
    </body> 
    </html> 

right.html:

<html> 
    <body> 
    <script> 
     function test(msg) { 
     alert(msg); 
     } 
     </script> 
    </body> 
    </html> 

Les travaux ci-dessus dans Firefox 3.6 et Chrome 3 mais Chrome 5, il jette l'erreur ci-dessus ...

Modifier:

  • a ajouté l'@cols attribut à l'élément frameset
  • en fait, il fonctionne dans Chrome si et seulement si les pages sont servi avec le protocole http (et du même domaine) mais mon problème est lorsque les pages sont locales et servies à partir d'un fichier: // protocole. Ensuite, il fonctionne dans Firefox (toutes les versions) et Chrome 3 mais pas Chrome 5 (je n'ai pas Chrome 4 donc je ne suis pas sûr de cette version spécifique (et je ne sais pas s'il est même possible de télécharger une version spécifique de Chrome) ?) - mais pour Chrome 5 je suis très sûr que ça ne marche pas).
+2

Cela devrait fonctionner correctement si toutes les pages se trouvent sur le même domaine. Êtes-vous sûr à 100% que c'est le même domaine (pas même 'www.domainname' versus' domainname')? Le même protocole (http/https)? –

+1

En fait, le problème est spécifique au protocole de fichier; Lorsque les fichiers sont diffusés via http et le même domaine, il n'y a aucun problème dans Chrome. mais sur le fichier: // Chrome 5 renvoie l'erreur comme mentionné. Le but de cette application est de ne nécessiter aucune installation de la part de l'utilisateur qui devrait pouvoir parcourir les fichiers directement sur un CD-Rom (ne demandez pas! ;-) donc si le protocole de fichier est cassé c'est un problème ... Toute aide serait grandement appréciée! – Bambax

Répondre

1

Voir les réponses à la question étroitement liée: Call a JavaScript function defined in an iframe in Chrome using the file protocol.

En bref, le lancement de Chrome avec --allow-file-access-from-files résout le problème dans la mesure où l'erreur ne sera pas signalée.

Bien sûr, puisque vous distribuez des fichiers sur un CD, il est peu probable que vous voyiez une solution réelle. Je recommande Chromium bug 47416 pour encourager les développeurs de Chromium à aligner Chrome sur le comportement de Gecko.

1

J'ai essayé vos pages de test, et ils fonctionnent très bien avec Chrome 4.1.249.1045 sur Windows (et Firefox 3.6.3 et IE7 [après la résolution du problème ci-dessous]). Donc je suis avec Pekka (comme d'habitude): Je pense que le problème doit être ailleurs.

Il ne fonctionnait pas dans IE7 et il m'a fallu une éternité pour comprendre pourquoi: Vous devez donner soit rows ou cols sur l'étiquette frameset, sinon IE ne charge que l'une trame. (Le validator m'aurait dit que si je l'avais demandé.)

+0

Merci beaucoup pour cela; S'il vous plaît voir mon édition de la question: en fait, le problème que j'ai avec Chrome se pose uniquement lors de l'utilisation du protocole de fichier (pas lorsque les fichiers sont servis avec un serveur web sur http). – Bambax