2011-03-29 5 views
0

Je travaille avec Iframes pour contrôler les éléments de iframe en l'automatisant à partir du fichier html parent. je tentais de cliquer sur le lien défini dans le fichier iframe.html à partir du fichier test.html à l'aide de la fonction clic() javascript lors du chargement test.html:innerDocument.getElementById (<elment ID>) .click(); ne fonctionne pas dans Firefox/chrome, dans IE cela fonctionne

fichier Test.html:

function handleMainOnload(){ 

    alert("main frame loaded"); 
    var innerFrame = document.getElementById("frame1"); 
    alert("hi-1" + innerFrame.ownerDocument.title); 
    var innerDocument = frame1.document; 
    alert("hi" + innerDocument.title); 
    innerDocument.getElementById("input1").value = "Dynamically Inserted Text"; 
    innerDocument.getElementById("a1").click(); 
} 

<body onload="handleMainOnload();"> 
<iframe id="frame1" src="iframe.html"/> 

fichier iframe.html:

<a id="a1" href="http://www.google.co.in"> Google.. click</a> 

Cet id = Acor a1 automatiquement obtenir cliqué onload de test.html dans IE mais ne fonctionne pas sur n'importe quel navigateur en dehors de IE. S'il vous plaît aider.

Répondre

1

De Javascriptkit.com:

click() - Exécute un clic sur un élément comme si l'utilisateur a cliqué sur manuellement. Dans la plupart des navigateurs, click() ne fonctionne que sur les éléments INPUT du formulaire qui ne sont pas "submit" ou "reset". Il ne peut pas être utilisé pour simuler un clic sur un lien ou un bouton de soumission de formulaire.

J'ai vérifié que c'est la raison pour laquelle cela ne fonctionne pas pour vous. En outre, je devais changer la ligne suivante:

var innerDocument = frame1.document; 

à

var innerDocument = window.frames["frame1"].document; 

mettra à jour une façon de le faire en jQuery.

EDIT:

Voici comment vous le faites dans jQuery. Essentiellement, vous liez un événement click puis appelez click() sur l'élément. Cela simule l'action car il n'existe aucun moyen standard d'exécuter des clics sur des liens hypertexte.

$(document).ready(function() { 
     $("#frame1").ready(function() { //The function below executes once the iframe has finished loading 
      alert("iframe loaded"); 
      $('#frame1').contents().find('#a1').click(function() { 
       alert("Hello"); 
       $('#frame1').attr('src', $('#frame1').contents().find('#a1').attr("href")); 
       $('#frame1').load(); 
      }); 
      $('#frame1').contents().find('#a1').click(); 
     }); 

    }); 
+0

Super ... ça marche bien .. merci :-) – Kamakshi

0

Vous pouvez le faire sans jQuery et sans cliquer sur les gestionnaires d'événements sur les points d'ancrage. (Confirmé avec IE 9, FF 15, Chrome 23)

La raison pour laquelle il ne fonctionnait pas (et pour l'édition de JackWilson) est que [dans IE au moins] innerFrame.document == innerFrame.ownerDocument, donc vous n'étiez pas cherche en fait l'ancre dans le document de contenu de l'iFrame. Utilisez plutôt innerFrame.contentDocument.

(je ne l'ai pas confirmé la solution de JackWilson pour l'utilisation window.frames [] dans les navigateurs autres que IE, mais certains navigateurs peut exiger le référencement window.frames [] par index au lieu de son numéro d'identification. Tout le monde sait bien sûr?)

Page principale: "aclicktest.html ":

<!DOCTYPE html> 
<html> 
<head><title>A click test</title></head> 
<body onload="clickIframe();"> 
<a id="alocal" href="http://stackoverflow.com" target=_blank>Local link</a> 
<iframe id='frame1' src="iframeaclicktest.html"></iframe> 
<input type='button' value='click local' onclick='clickLocal();'/> 
<input type='button' value='click iframe' onclick='clickIframe();'/> 
<script type="text/javascript"> 
function clickLocal(){document.getElementById("alocal").click();} 
function clickIframe(){document.getElementById("frame1").contentDocument.getElementById("aiframe").click();} 
</script> 
</body> 
</html> 

Page Iframe: "iframeaclicktest.html":.?

<!DOCTYPE html> 
<html> 
<head><title>A click test IFRAME</title></head> 
<body> 
<a id="aiframe" href="http://stackoverflow.com" target=_blank>IFRAME link</a> 
</body> 
</html> 

C'est intéressant de noter que l'ancien code travaillait dans IE Quelle version et avez-vous défini doctype Il est peut-être comportement du mode quirks