Загрузка формы в iframe - PullRequest
       19

Загрузка формы в iframe

0 голосов
/ 09 декабря 2010

Я хочу загрузить форму в 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();

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

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

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

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

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

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

Редактировать: Вы также можете добавить 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 голосов
/ 09 декабря 2010

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

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

...