2010-12-02 4 views
0

J'ai une page HTML avec un film Flash intégré, qui a un bouton. Ce bouton en flash appelle l'événement click de lnkEmail. Il est censé arrêter de naviguer vers une nouvelle page, mais event.preventDefault(); et le retour de faux du gestionnaire d'événements ne semble pas fonctionner pour moi. Quelqu'un peut-il donner un aperçu?L'événement jQuery click ne redirige pas vers href

L'exemple ci-dessous fonctionne dans Chrome, mais échoue dans IE 7 et FF. Dans ces navigateurs, il redirige vers une page vierge avec Object [objet] comme corps et dans FF, l'URL est définie sur le code javascript que j'exécute depuis l'animation Flash. (ie: "javascript: jQuery ('# lnkEmail'). click();")

Ci-dessous le code dans le code ActionScript Flash.

cmdDemo.addEventListener(MouseEvent.CLICK, clickHandler); 
function clickHandler(event:MouseEvent):void { 
    navigateToURL(
     new URLRequest(
     "javascript:jQuery('#lnkEmail').click();" 
    ), 
     "_self" 
    ); 
} 

Dans la page HTML contenant il y a les scripts et les éléments suivants:

<script type="text/javascript"> 
    $(function(){ 
     $.nyroModalSettings({ 
     debug: true 
     }); 

     $('#lnkEmail').click(function(event) { 
     event.preventDefault(); 
     $.nyroModalManual({ 
      url: 'demoRequest.aspx?Type=4' 
     }); 
     return false; 
     }); 
    }); 
</script> 

Et plus tard dans le même fichier:

<div id="box_stage_home"> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
     $('#HomeAnimation').flash({ 
      swf: 'Flash/index_page.swf', 
      height: 288, 
      width: 686, 
      wmode: 'transparent' 
     }); 
     }); 
    </script> 
    <div id="HomeAnimation"><!--IE 6.0--></div> 
    <a href="emailSend.aspx?Type=4" id="lnkEmail">&nbsp;</a> 
</div> 
+0

oublié de mentionner que cela fonctionne dans Chrome. Mais dans IE 7 et dans FF, il redirige vers une page avec Object [objet] et une URL comme javascript: jQuery ('# lnkEmail'). Click() ;. – Rob

+0

Bienvenue dans Stack Overflow! Vous pouvez modifier votre message d'origine en cliquant sur le lien "modifier" dans le coin inférieur droit de la question - pas besoin de commenter quelque chose comme ça. –

Répondre

0

J'ai trouvé la bonne façon (merci corneliu) de le faire, donc j'ai pensé que je le posterais ici pour référence. Dans le fichier html:

<script type="text/javascript"> 
    function viewDemo() { 
     $.nyroModalManual({ 
     url: 'emailSend.aspx?Type=4' 
     });   
    } 
</script> 

Dans le fichier flash:

import flash.system.Security; 

cmdDemo.addEventListener(MouseEvent.CLICK, clickHandler); 

function clickHandler(event:MouseEvent):void { 
    flash.system.Security.allowDomain("business.com"); 
    ExternalInterface.call("viewDemo"); 
} 
+0

Génial, hé Rob tu devrais pouvoir accepter ta propre réponse. Cela aidera toute personne qui pourrait trouver cela par la recherche. – jyoseph

1

Jetez un oeil à la documentation navigateToURL: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/package.html#navigateToURL%28%29 . Il n'a pas l'intention d'être utilisé avec des liens javascript:.

Pour faire ce que vous voulez, utilisez ExternalInterface.call().

+0

Ajout de void (0); après l'appel à navigateToURL() a fini par être la solution. Le vide (0); dit au navigateur de ne pas ouvrir une nouvelle page spécifiquement. Trouvé sur une page de documentation Flash quelque part, je ne me souviens pas pour le moment. Oh et oui il fallait ajouter allowScriptAccess = "always" aux vars flash. Je vois aussi maintenant comment utiliser ExternalInterface pour le faire, ce qui semble effectivement être la bonne façon de le faire. – Rob

+0

Dit que mal avant ... Ajouter void (0); après l'appel à click() sur l'élément lnkEmail, à l'intérieur du javascript, a fini par être la solution. – Rob

+0

"javascript: jQuery ('# lnkEmail'). Click(); void (0);" – Rob

Questions connexes