J'ai un problème étrange seulement dans Chrome en utilisant un iframe
mais travaillant dans tous les autres navigateur commun. Le problème: Si je tape IFRAME puis j'appuie sur le bouton pour envoyer, ça marche bien, le focus sur l'IFRAME et le curseur BLINK.Problème avec Google Chrome et Javascript. Guru nécessaire!
Mais si je tape et que j'appuie sur ENTRÉE pour appeler la fonction de gestionnaire d'événements, la mise au point revient mais le curseur disparaît. Et puis, si vous allez dans une autre fenêtre et que vous retournez, le curseur apparaîtra. Cela se produit uniquement dans Chrome. J'ai fait la page d'exemple pour montrer le problème en action. Cliquez sur le lien ci-dessous pour voir.
MISE À JOUR: J'ajouté le code aussi ci-dessous
var editorFrame = 'myEditor'
function addFrame() {
var newFrame = new Element('iframe', {
width: '520',
height: '100',
id: editorFrame,
name: editorFrame,
src: 'blank.asp',
class: 'myClass'
});
$('myArea').appendChild(newFrame);
window.iframeLoaded = function() {
// this is call-back from the iframe to be sure that is loaded, so can safety attach the event handler
var iframeDoc, UNDEF = "undefined";
if (typeof newFrame.contentDocument != UNDEF) {
iframeDoc = newFrame.contentDocument;
} else if (typeof newFrame.contentWindow != UNDEF) {
iframeDoc = newFrame.contentWindow.document;
}
if (typeof iframeDoc.addEventListener != UNDEF) {
iframeDoc.addEventListener('keydown', keyHandler, false);
} else if (typeof iframeDoc.attachEvent != UNDEF) {
iframeDoc.attachEvent('onkeydown', keyHandler);
}
};
}
function resetContent()
{
var myIFrame = $(editorFrame);
if (myIFrame) myIFrame.contentWindow.document.body.innerHTML='';
}
function setEditFocus()
{
var iFrame = document.frames ? document.frames[editorFrame] : $(editorFrame);
var ifWin = iFrame .contentWindow || iFrame;
ifWin.focus();
}
function send()
{
resetContent();
setEditFocus();
}
function keyHandler (evt) {
var myKey=(evt.which || evt.charCode || evt.keyCode)
if (myKey==13) {
if (!evt) var evt = window.event;
evt.returnValue = false;
if (Prototype.Browser.IE) evt.keyCode = 0;
evt.cancelBubble = true;
if (evt.stopPropagation) evt.stopPropagation();
if (evt.preventDefault) evt.preventDefault();
send();
}
}
Dans la page HTML
<body onload="addFrame()">
<div id="myArea"></div>
<input id="myButton" type="button" value="click me to send [case 1]" onclick="send()">
Pour rendre plus facile à comprendre le problème que j'ai créer une page spécifique à reproduire le problème avec l'exemple complet et la source inclus.
Vous pouvez voir ici en utilisant Google Chrome: example of the problem
je vraiment besoin de votre aide parce que j'ai essayé de résoudre ce problème pendant plusieurs jours sans chance. Et toutes les suggestions, astuces et solutions de contournement sont bien acceptées.
Merci d'avance.
S'il vous plaît créer un exemple minimal qui reproduit votre problème réel qui est assez petit pour coller ici. Il est difficile de voir ce que vous essayez d'atteindre et quel est votre problème. :) – bzlm
@bzlm Ops, je pensais que c'était mieux de voir le problème en action non? Btw je vais poster ici le code aussi :) –
c'est assez dur - OP a fait un très bon exemple qui démontre le problème. –