2010-12-09 5 views
0

Я хочу загрузить форму в iframe. Iframe будет загружен на случайную страницу, когда пользователь нажимает на букмарклет.Загрузка формы в iframe

Вот код до сих пор:

loginForm = document.createElement("form"); 
    loginForm.setAttribute("method","Post"); 
    loginForm.setAttribute("action","http://devserver:8000/action/"); 
    parameters = {}; 
    parameters['url'] = parent.window.location; 

    for(var key in parameters) 
    { 
     var hiddenField = document.createElement("input"); 
     hiddenField.setAttribute('type',"hidden"); 
     hiddenField.setAttribute('name',key); 
     hiddenField.setAttribute('value',parameters[key]); 
     loginForm.appendChild(hiddenField); 
    } 

    loginIFrame = document.createElement('iframe'); 
    loginIFrame.src = "about:blank"; 
    loginIFrame.appendChild(loginForm); 
    loginIFrame.style.top = "0px"; 
    loginIFrame.style.position='fixed'; 
    loginIFrame.style.display = 'block'; 
    loginIFrame.style.zIndex = 100; 
    loginIFrame.style.border = "solid #48D236 10px"; 
    loginIFrame.height = "25px"; 
    loginIFrame.width = "100%"; 
    loginIFrame.style.border = 0; 
    loginIFrame.id = "loginFrame"; 
    loginIFrame.name = "loginFrame"; 
    usernameField = document.createElement("input"); 
    usernameField.type = "text"; 
    usernameField.size = 8; 
    usernameField.name = "usernameField"; 
    usernameField.id = "usernameField"; 

    passwordField = document.createElement("input"); 
    passwordField.type = "password"; 
    passwordField.size = 8; 
    passwordField.name = "passwordField"; 
    passwordField.id = "passwordField"; 


    submitButton.style.position='fixed'; 
    submitButton.style.top = "60px"; 
    submitButton.type = "button"; 
    submitButton.value = "Submit"; 
    submitButton.onclick = function(){loginUser();};*/ 
    b.style.position="relative"; 


    addToBody(loginIFrame); 
    loginForm.submit(); 

Что в конечном итоге происходит, вся страница получает перезагружается на непредставления (последней строке кода), а не IFrame. Есть идеи?

Заранее спасибо

ответ

1

Возможно, вы захотите добавить форму, используя loginIFrame.contentWindow.document вместо loginIFrame.appendChild.

Возможно, вам также необходимо будет добавить свою форму после того, как iframe будет добавлен на страницу, поскольку свойство contentWindow будет недоступно.

Возможно, я ошибаюсь, но я уверен, что форма не добавляется в iframe, потому что вы используете appendChild. Я действительно не думаю, что вы можете манипулировать им, так как он будет загружать URL-адрес, который вы скажете ему для загрузки (т. Е. Около: пусто).

Edit: Вы также можете добавить loginForm.setAttribute("target", "loginFrame");

Вот что я тестировал с и она отлично работает:

loginIFrame = document.createElement('iframe'); 
loginIFrame.src = "about:blank"; 
loginIFrame.style.top = "0px"; 
loginIFrame.style.position='fixed'; 
loginIFrame.style.display = 'block'; 
loginIFrame.style.zIndex = 100; 
loginIFrame.style.border = "solid #48D236 10px"; 
loginIFrame.height = "100px"; 
loginIFrame.width = "100%"; 
loginIFrame.style.border = 0; 
loginIFrame.id = "loginFrame"; 
loginIFrame.name = "loginFrame"; 

document.body.appendChild(loginIFrame); 

var idocument = loginIFrame.contentWindow.document; 

loginForm = idocument.createElement("form"); 
loginForm.setAttribute("target", "loginFrame"); 
loginForm.setAttribute("method","Post"); 
loginForm.setAttribute("action","http://devserver:8000/action/"); 
parameters = {}; 
parameters['url'] = parent.window.location; 

for(var key in parameters) 
{ 
    var hiddenField = idocument.createElement("input"); 
    hiddenField.setAttribute('type',"hidden"); 
    hiddenField.setAttribute('name',key); 
    hiddenField.setAttribute('value',parameters[key]); 
    loginForm.appendChild(hiddenField); 
} 

loginIFrame.appendChild(loginForm); 

loginForm.submit(); 
  • Christian
+0

Мда изменил заканчивая включением loginForm = loginIFrame.contentWindow.document.createElement ("form"); но он не перенаправляет действие/submit с помощью firefox. На хром он делает. На firefox он просто остается в .src, на который я устанавливаю iframe. Есть идеи? – Yoshi9143 2010-12-09 20:36:28

0

Возможно установить целевую форму в плавающий фрейм. Я представляю себе, поскольку вы создаете элементы в контексте «родительской» страницы, она использует главную страницу в качестве цели (даже если она встроена).

EDIT Вы также можете попробовать вызвать createElement из iFrame после того, как вы создали его, чтобы сохранить контекст.

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