2010-12-09 3 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.appendChild 대신 loginIFrame.contentWindow.document을 사용하여 양식을 추가 할 수 있습니다.

contentWindow 속성을 사용할 수 없으므로 iframe이 페이지에 추가 된 후에도 양식을 추가해야 할 수도 있습니다.

내가 틀릴 수도 있지만 appendChild을 사용하고 있기 때문에 양식이 iframe에 추가되지 않는다고 확신합니다. 로드 할 URL (예 : 약 : 공백)을로드 할 것이므로 실제로는 조작 할 수 없다고 생각합니다.

편집 : 당신은 또한 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(); 
  • 기독교
+0

흠 내가 변경된 loginForm = loginIFrame.contentWindow.document.createElement ("form")을 포함하도록 끝나야합니다. 하지만 액션에 리디렉션하지 않습니다/파이어 폭스와 함께 제출하십시오. 크롬에서 그렇습니다. 파이어 폭스에서 .src 그냥 iframe을 설정합니다. 어떤 아이디어? – Yoshi9143

+0

개인적으로 북마크릿에 대해 다른 접근 방식을 취할 것입니다. 북마크에 모든 코드를 넣으면 강제 업데이트하지 않는 한 아무 것도 변경할 수 없습니다. 나는 페이지에 iframe을 추가하는 간단한 북마크릿을 만들 것이다. iframe이 나머지 모든 작업을 수행하는 페이지를 가리 키도록하십시오. iframe 내에서 부모 창에 대한 액세스가 필요하지 않으면? –

+0

크로스 스크립팅을 사용하려면 다음과 같이하십시오. iframe을 페이지로로드하여 필요한 URL 정보가 포함 된 내 서버에 게시물 요청을 제출합니다. -> 서버는 내 서버에 다른 요청을하는 페이지를 반환합니다. 사용자가 로그인했는지 확인하기 위해 별도의 요청을해야 함) -> 서버가 요청에 성공하면 사용자에게 응답을 보냅니다. – Yoshi9143

0

폼 타겟을 iFrame으로 설정했을 수 있습니다. 부모 페이지 컨텍스트 내에서 요소를 만들므로 기본 페이지를 대상으로 사용하고 있기 때문에 상상할 수 있습니다 (삽입 된 상태 임에도 불구하고).

당신이 너무 컨텍스트를 유지하기를 만든 후에는 iframe을에서의 createElement를 호출을 시도 할 수 편집 할 수 있습니다.