2009-05-07 5 views
5

다음 사용 사례에 대한 브라우저 간 솔루션이 필요합니다. 사용자가 당사 페이지 중 하나에서 "내보내기"버튼을 클릭하면 양식이있는 팝업 창이 열립니다. 양식을 제출할 때 사용자는 이진 파일 다운로드 (예 : CSV 파일)를 받아야하며 상위 창이 보이는 내용을 변경하지 않고 팝업을 닫아야합니다.(IE 및 Firefox에서) 닫힌 팝업에서 이진 파일 다운로드를 제공하는 방법은 무엇입니까?

파일을 다운로드하기 전에 사용자에게 파일을 처리하는 방법을 묻는 대화 상자가 일반적으로 있기 때문에 시간 초과를 사용하여 팝업을 닫을 수 없으며 사용자가이 대화 상자를 처리하는 데 걸리는 시간을 알 수있는 방법이 없습니다 .

우리는 원래 window.location을 다운로드 파일 URL로 설정하는 팝업 스크립트를 사용했습니다. 그러면 팝업이 닫히지 않습니다.

그렇다면 부모 창에 숨겨진 iFrame을 넣고 iFrame의 src를 다운로드 URL로 설정하여 self.close()를 호출하기 전에 시도해 보았습니다. 파이어 폭스에서 완벽하게 작동하지만 IE는 보안 제한으로 완벽하게 망가 뜨린다.

올바른 방법이 있습니까? Internet Explorer에서 작동하는 방법은 어떻습니까?


업데이트 - 문제는 여기에 제안 된 답변이 너무 멀리하지 않았다

를 해결하지만, 내 문제는 자바 스크립트 문제 것보다 조금 더 복잡했다. IE 및 Excel (다운로드 파일이 CSV이기 때문에)에서 버그가 발생했으며 팝업이 양식 게시를하고있었습니다.

URL에 양식 데이터를 추가하지 않고도 POST 대신 GET을 사용하여 문제를 해결할 수 없으며 IE에서 신뢰할 수있는 사이트로 설정해야합니다 (엔터프라이즈 앱이므로 합리적입니다). 사용자의 요청).

양식 단추를 클릭하면 팝업에서 window.opener의 함수를 호출하여 양식과 해당 동작 URL을 전달합니다. 그런 다음 팝업창은 window.close()를 호출합니다. 이 함수는 양식 데이터를 URL에 추가하고 window.location을 새 URL로 설정합니다. iFrame 아이디어는 IE에서 제대로 작동하지 않았고 분명히 필요하지 않았습니다.

양식 URL에 대한 응답에서 요청 헤더에는 Content-Type : application/octetstream 및 Content-Disposition ","첨부 파일이 포함됩니다. 파일 이름 = filename.csv ".

+0

을 다운로드하면 원래 페이지에 양식을 삽입하거나 iframe (스크립트 자체에서 생성 될 수 있음)에서 새 페이지를 열도록 지시합니까? – Anonymous

+0

Anonymous 님의 질문에 답변 - 당신이 설명하는 것은 내가 한 일종의 생각입니다. 생성 및 초기로드시 팝업은 실제로 보이지 않는 iFrame을 부모 페이지에 씁니다. 양식이 팝업에 제출되면 다운로드 파일을로드하도록 iFrame에 지시합니다. 내 IE (IE 6)가이를 차단하고 부모 창에서 다운로드를 확인하도록했습니다. 확인시 부모 창이 다시 제출되어 다른 확인 대화 상자를 표시하고 일반적으로이를 취소합니다. –

+0

나는 iframe에 양식을 제출할 생각이었는데, 이는 느린 팝업 문제를 제거합니다. – Anonymous

답변

0

이 문제를 접근하는 방법이 될 수 있습니다.

1) 팝업 형태의 onsubmit은 빈 페이지가있는 페이지가 열립니다 그 세 번째 창에 window.open 않습니다 방금 다운로드 한 파일을 반환합니다.

2) 팝업 양식에 자바 스크립트에서, 당신은 window.open을 할 직후에, 당신의 부모 창 (1 창) 팝업이 양식을 제출 닫 메서드를 호출합니다.

3) 파일을 반환하는 페이지 인 세 번째 페이지에서 헤더 파일의 내용 처리를 사용하여 파일과 noth를 반환합니다. 그렇지 않으면 페이지가 실제로 열리지 않습니다.

여기에 필요한 헤더 정보가 있습니다. 이 코드는 고전적인 선사 시대 ASP에 있지만, 필요한 것을 뽑을 수 있어야합니다. 도움이

http://classicasp.aspfaq.com/general/how-do-i-prompt-a-save-as-dialog-for-an-accepted-mime-type.html

희망.

+0

팝업에서 양식 제출이 실제로 다운로드 할 파일을 생성하고 이름을 지정하기 때문에 제 1 단계가 제 경우에는 작동하지 않을지 모르겠습니다. 이 제출 결과를 얻을 때까지 다운로드 URL을 모르기 때문에 세 번째 창을 열 수 없습니다. 그게 해결할 수있는 문제이지만, 개발주기 후반에 버그가 수정되었으므로 파일 다운로드 서블릿 자체를 건드릴 필요가 없었습니다. –

1

실제로 iframe 솔루션의 위치를 ​​설정하는 부모 창 안의 메소드를 호출 해 보았습니까?

부모 창

<html> 
<head> 
<script type="text/javascript"> 
var w; 

var download = function() { 
    document.frames[0].location = "test.php"; 
    w.close(); 
}; 

var o = function() { 
    w = window.open("test2.html", "window_name"); 
    return false; 
}; 
</script> 
</head> 
<body> 

<a href="#" onclick="return o();">open</a> 

<iframe></iframe> 

</body> 
</html> 

팝업 창

<html> 
<head> 
<script type="text/javascript"> 
var download = function() { 
    window.opener.download(); 
    return false; 
}; 
</script> 
</head> 
<body> 

<a href="#" onclick="return download();">download</a> 

</body> 
</html> 

test.php 파일을 강제로 단지 페이지입니다 : 내 테스트에서 일 때문에 부탁 해요 위의 코드는 document.frames 객체를 사용함에 따라 IE가 특정 적이지만 크로스 브라우저로 쉽게 만들 수 있다는 점에 유의하십시오.

+0

상위 페이지 생성시 파일 다운로드 URL을 알 수 없습니다. 나는 그것이 download() 함수에 전달 될 수 있다고 가정한다. 나는 이것을 시험해야 할 것이다 (나의 스케줄 때문에 다음 주 초). –

+0

오프너에 download() 함수를 추가해도 문제가 해결되지 않았습니다. IE는 여전히 다운로드 프로세스를 차단하고 완전히 망가 뜨립니다. 다음 단계는 팝업 대신 iFrame에서 양식을로드하는 것입니다. –

+0

IE의 버전은 무엇입니까? –

-1

완벽한 해결책이 없습니다. IE에서 파일 다운로드가 팝업되고 Firefox에서 직접