2014-01-10 8 views
0

Я пытаюсь загрузить форму внутри iFrame, а затем войти в нее с помощью JavaScript, два для циклов для выбора полей входа. У меня возникают проблемы с доступом к элементу формы в дереве DOM. Строка var form = doc.forms[0]; не дает мне никаких проблем, но когда я пытаюсь использовать такие функции, как form.action, это говорит Uncaught TypeError: Cannot set property 'action' of undefined. Что я делаю не так?Доступ к форме внутри iFrame

<HTML> 
    <head> 
    </head> 
     <body> 
     <iframe height="300px" id="carrierPage" name="carrierPage" src="" width="100%"></iframe> 
      <script type="text/javascript"> 
      function autoLogin(username, password, url){ 
       var iframe = document.getElementById("carrierPage");; 
       iframe.src = url; 
       var doc = iframe.contentWindow.document; 
       var form = doc.forms[0]; 
       form.action = url; 
       form.target = "carrierPage"; 
       for(var i = 0; i < form.length; i++) 
        if(form.elements[i].type == "text"){ 
         form.elements[i].value = username; 
         i = form.length + 1; 
        } 
       for(var i = 0; i < form.length; i++) 
        if(form.elements[i].type == "password"){ 
         form.elements[i].value = password; 
         i = form.length + 1; 
        } 
       form.submit(); */ 
      } 

      autoLogin("someUserName", "somePassword", "https://someURL.com/login");   
      </script> 
     </body> 
    </HTML> 
+2

И протокол, домен и порт же в IFRAME, как в родительской страницы, в противном случае вы нарушение того же происхождения политика – adeneo

+0

уаг док = iframe.contentDocument; – bjb568

+0

Предполагая, что проблема с исходной политикой еще одна возможность может быть межсерверной проблемой contentWindow и contentDocument. –

ответ

0

Хотя у вас нет никаких проблем, когда речь идет о doc.forms[0], doc.forms[0] еще может быть undefined. Прежде чем обращаться к элементу в пределах iframe, вам нужно подождать, пока содержимое новой страницы не будет загружено в iframe. Вы можете сделать что-то вроде этого:

function autoLogin(username, password, url){ 
    var iframe = document.getElementById('carrierPage'); 
    iframe.addEventListener('load', function() { 
     var doc = iframe.contentWindow.document; 
     var form = doc.forms[0]; 
      ... 
     form.submit(); 
    }); 
    iframe.src = url; 
} 
+0

Uncaught SecurityError: заблокирован кадр с исходным «нулем» от доступа к кадру с источником «https://www.someURL.com». Запрос доступа к кадру имеет протокол «файл», к кадру, к которому осуществляется доступ, имеет протокол «https». Протоколы должны совпадать. – paulp

+0

@paulp На самом деле странно, что вы указали «form = doc.forms [0]; не дает мне никаких проблем», если вы получите это конкретное сообщение об ошибке сейчас, когда используете фиксированный код ...? – Teemu

Смежные вопросы