2010-06-25 4 views
0

Donc, je travaille sur un éditeur WYSIWYG avec une grammaire déjà installée, etc. J'ai été chargé d'ajouter copier et coller des fonctionnalités pour cross programme. Le code que j'ai fonctionne dans Google Chrome sur Ubuntu, Firefox dans Ubuntu et Windows, mais pas dans Chrome sur Windows.jquery: Windows Google Chrome ne déclenche pas d'événement dans iframe

J'ai repéré le problème à quelque chose de basique. Lorsque la commande paste est envoyée (par l'intermédiaire de l'événement Ctrl + V), je mets immédiatement l'accent sur un iframe caché, contenteditable, et déclenche l'événement là. J'attends alors qu'il se lève et puis manipule l'analyse et le collage.

this.pasteOperation = function(event, controller) { 
    this._cutpastearea.getEditable().focus().trigger(event); 
    setTimeout(function() { controller.clipboardControl().handlePaste(); }, 1); 
}, 

(Où getEditable obtient la section contenteditable du iframe)

Maintenant, si je révélerai l'iframe, et désactiver le délai d'attente ensemble, je trouve que l'accent a été saisi, mais rien n'a été collé. Si je continue à le coller manuellement, puis appelez la fonction, tout fonctionne.

Alors, pourquoi cela ne déclenche-t-il pas l'événement?

Modifier: a également soulevé le problème au Chromium Issues. Il semble que ce soit un problème d'iframe seulement.

Répondre

1

Trouvé une oeuvre autour. Au lieu d'appeler le déclencheur, appelez ceci:

$.fn.forwardEvent = function(event) { 
    this.each(function() { 
     if (this.dispatchEvent) { 
      if (event.originalEvent) { 
       event = event.originalEvent 
      } 
      try { 
       this.dispatchEvent(event); 
      } catch(error) { 
       $(this).trigger(event); 
      } 
     } 
     else { 
      $(this).trigger(event); 
     } 
    }); 
    return this; 
}; 
Questions connexes