2009-12-15 12 views
3

J'ai une application web qui se compose de deux sites Web - l'un fonctionnant sur le port 8080 (Java) et l'autre sur le port 80 (IIS). Les pages Web Java sont appelées dans des pages Web IIS, qui sont parfois rappelées dans des pages Web Java pour obtenir des informations supplémentaires. Le JavaScript qui gère la communication/échange de données fonctionne dans IE, mais pas dans Firefox.Firefox AddEventListener issue

Page 1 (IIS)> onClick de Button> Page 2 (Java/Tomcat)> L'utilisateur ferme pop-up> Transfert de données à la page 1

JavaScript:

if(window.attachEvent){//IE exclusive method for binding an event 
    alert("AttachEvent"); 
    window.attachEvent("onfocus", Focus_onfocusEvent); 
    window.objExitPopupWindow.attachEvent("onunload", Focus_onunloadExitEvent); 
} else if(window.addEventListener){//DOM method for binding an event. W3C standard   
    try{ 
     alert("Event Listener"); 
     window.addEventListener("focus", Focus_onfocusEvent, true); 
     window.objExitPopupWindow.addEventListener("unload", Focus_onunloadExitEvent, true); 
    } catch(err) { 
      alert(err); 
    } 
} 

La question que je lance en est:

a) Dans Firefox, si je le alert("Event Listener"); activé, je reçois une erreur au sujet Error: Permission denied for "http://localhost" to get property Window.addEventListener from "http://localhost:8080".

b) Dans Firefox, si je n'ai pas l'alerte, alors il n'y a pas de message d'erreur affiché, mais il semble Focus_onuloadExitEvent d'abord puis Focus_onfocusEvent, le tout en train d'ouvrir le popup. Fermeture de la fenêtre contextuelle ne se déclenche pas Focus_onunloadExitEvent.

Comment puis-je m'assurer que le code se comporte correctement dans Firefox et IE - ie. Je veux que le onfocusEvent se déclenche sur le menu contextuel et que onunloadEvent se déclenche lors du déchargement contextuel.

Répondre

5

Ceci est le same origin policy. JavaScript ne peut pas être chargé par un document sur l'hôte A ou modifier le contenu d'un document chargé depuis l'hôte B. Comme l'un de vos hôtes est localhost:80 et l'autre localhost:8080, ils sont considérés comme des hôtes différents par le navigateur. Dans votre cas particulier, une solution consisterait à placer la page popup sur le même serveur que la page qui l'ouvre et à placer un iframe dans le popup pointant vers le contenu de l'autre hôte. De cette façon, votre JavaScript pourra attacher des écouteurs d'événements au popup lui-même.