2013-10-03 8 views
6

Desidero riempire automaticamente le caselle di testo su un altro sito Web, pertanto sto scrivendo un breve script per farlo. Sto caricando un iframe con un sito Web in esso e se questo iframe è caricato, dovrebbe compilare i moduli di testo di input. Così ho scritto questo in autofill.php:Compila i moduli di testo di input su un altro sito Web in iframe

<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> 
<script src="fill.js"></script> 
<iframe name="autofillframe" src="https://e-services.blum.com/main/" style="width:100%; height:100%;"></iframe> 

E questo ho scritto nel fill.js:

$(document).ready(function(e) { 
    $('#username').val('username'); 
    $('#kennwort').val('password'); 
}); 

Ecco un fiddle

Se lo faccio con un file .php al posto di un sito web, funziona bene Ecco uno demo senza sito web

Qualcuno può darmi un suggerimento?

Acclamazioni

risposta

12

Quando si carica una pagina da un dominio diverso in una iframe, non si può fare nulla alla pagina iframe da JavaScript nella tua pagina.

Per quanto riguarda il browser, l'iframe è una finestra separata e non è possibile accedervi. Immagina che l'utente abbia una pagina bancaria aperta in una finestra e la tua pagina aperta in un'altra finestra. Sai che il browser non permetterebbe al tuo codice JavaScript di interferire con la pagina bancaria, giusto?

La stessa cosa si applica quando l'altra pagina si trova in un iframe. È ancora una finestra del browser completamente separata, è posizionata in modo tale da apparire all'interno della tua pagina.

Nel tuo esempio di lavoro, il codice funziona perché i campi nome utente e password sono non in un iframe da un dominio diverso. Fanno parte della stessa pagina in cui è inserito il codice JavaScript.

Se lo iframe viene caricato dallo stesso dominio della pagina principale, allora puoi fare tutto ciò che vuoi, incluso compilare i campi del modulo. Il codice potrebbe essere leggermente diverso perché è necessario accedere al documento iframe anziché al documento della pagina principale, ma è facile. Ma se lo iframe proviene da un dominio diverso, sei sfortunato.

+0

Hm va bene, sembra logico. C'è un altro modo o non è possibile? – Roman

+0

Davvero niente affatto, mi dispiace! La sicurezza del browser non lo permetterà. –

+0

Mh okay, che peccato. Grazie per avermi supportato :) – Roman

2

Premendo il pulsante di invio, il valore immesso copia dalla casella di testo di input alla casella di testo iframe (o al contrario di essa). è possibile implementare le cose come:

Test1.html

<!doctype html> 
<html> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script> 
     $(document).ready(function(){ 
      $('#submit').click(function(){ 
       var iframe = document.getElementById('myiframe'); 
       var doc = iframe.contentDocument || iframe.contentWindow.document; 
       var elem = document.getElementById('username'); 
       doc.getElementsByName('user')[0].value = elem.value; 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <input type="text" id="username"> 
    <input type="submit" id="submit"> 
    <iframe id="myiframe" frameborder="1" src="test2.html"></iframe> 
</body> 
</html> 

E Test2.html:

<!DOCTYPE html> 
<html> 
<body> 
    <input type="text" name="user" id="user"> 
</body> 
</html> 
Problemi correlati