[JS] 멀티파일 다운로드 (새창버전)

다중 파일 다운로드를 스크립트 꼼수로 예전에 구현했었는데, XP SP2 버전과 IE 5.0 이하에서 문제가 있다고 하네요.
( 참고 : http://mygony.com/tt/index.php?pl=76&nc=1 )

이번 소스 역시 대단하다고 할만한 것은 못되지만, 조금 더 미려한(?) 화면을 보여줄 수 있다는 장점이 있고, (아마도) IE 5.0도 지원될 겁니다. -_-a;;

이 부분이 소스입니다.

/**
* by 행복한고니 (20041014)
*/
function mdown(N, W, H, T, L)
{
var Title = "Downloading..."; // 창 제목
var Loading = "loading.html"; // 로딩 페이지 경로

//-------------------------------------------------------
// 이 이하로는 소스를 수정하지 마세요.
//-------------------------------------------------------

var objs = document.getElementsByName(N);
var win, rowStr = "", S = [];

if (objs == null || objs.length == undefined) return;
if (W == undefined || isNaN(parseInt(W))) W = 300;
if (H == undefined || isNaN(parseInt(H))) H = 300;
if (T == undefined || isNaN(parseInt(T))) T = parseInt((screen.height-H-30)/2);
if (L == undefined || isNaN(parseInt(L))) L = parseInt((screen.width-W)/2);

for (var i=0; i"+Title+"" +
"" +
""
);

for (var i=0; i < S.length; i++) { win.document.write("");
}
win.document.write("");
win.document.close();
}

//----------------------------------------------------------------
// 사용자 정의 함수 구현부
//----------------------------------------------------------------
mdown.GetURL = function(val) {
// 이 함수를 각자의 프로그램 사양에 따라 적당히 만들어주세요.
// 체크박스에 있던 value 값이 val로 전달됩니다.

return "http://mysite.com/download.php?fileid="+val;
}

우선 파일 다운로드를 하는 프로그램을 download.php 라고 가정합니다.

이 때, download.php 에서 파일을 다운로드 할 때 download.php?fileid=아이디번호 와 같은 식으로 쓴다고 가정합니다. 이 규칙에 의해서 mdown.GetURL 함수를 사용자가 작성합니다.

저번의 iframe 버전에 비해 달라진 것이 하나 있는데 아무래도 새 창이다보니 새창의 위치를 지정해주는 전달자가 늘었습니다. 순서대로 W(idth : 너비), H(height : 높이), T(op : 위), L(eft : 왼쪽) 의 정수형 값을 지정해주시면 되고, 뒤쪽부터 순서대로 생략하거나 모두 생략할 수 있습니다. 생략하면 기본값이 지정됩니다.

스크립트를 포함한 후, 예제 HTML은 다음과 같이 쓸 수 있습니다.

1번 파일
2번 파일
3번 파일
4번 파일

아래가 예제입니다.
[#NOBR_START#]













[#NOBR_END#]

( IE 6.0 SP1, Firefox 1.0PR, Opera 7.54 ) - Windows2000

[##_1C|770333.zip|| 다운로드 받으시려면 클릭! _##]

  1. TK // 소스꾸며주는 클래스를 썼거든요. ^^;; 에딧플러스 파일만 가져다 놓으면 소스를 꾸며주는 프로그램에서 알아서 확장자를 인식합니다. 제가 만든 클래스인데 그걸 태터툴즈에 적용시킨거죠. 🙂

    lovejin // 실은 lovejin님이 새 창으로 띄우는 걸 보고, 새 창 버전도 하나 있었으면 좋겠다고 생각해서 만든 것입니다. XP SP2 만 아니라면 괜찮을 것 같습니다. XP SP2 이 녀석은 당췌 기준을 알 수가 없어서 힘드네요. 공식지원을 포기할까도 생각중입니다.
    안그래도 IE가 마음에 안들어 죽겠는데, 이 마당에 SP2 라는 성가신 놈을 내놓아서... -_-;;

  2. 가을이예요.

    자료실에 사용할 기능을 구현하느라 이리저리 돌아다니다가 행복한 고니님 블로그에서 괜찮은 기능을 발견했답니다. 까먹기전에 낼름 옮겨왔습니다. 좋은 글, 감사드립니다.!

    행복한 고니님 글 원문보기

    멀티다운로드란?
    여러개의 파

  3. 흐흐...님 덕분에 의욕불끈(~_~)해서 클래스 달고 테스트중입니다. 문법강조(?)..문법꾸미기? 소스꾸미기? 강좌도 집에가서 마무리하고..오늘밤에 올려야죵..암튼...고니님 덕분에 갑자기 프로그래밍에 열혈중입니다.!!! ㅋㅋ

  4. 가을이// 제가 쓰는 브라우저에 Avant 는 없어서... ㅡ.ㅡ;; 그 브라우저도 IE 컨트롤을 가지고 오는 걸로 아는데요, 그렇다면 Avant 자체 설정에서 무언가 안되게 되어있거나, IE 컨트롤에서 막혔을지도 모릅니다.
    아! 서버마다 최대 접속수를 제한하는 곳도 있습니다. 꼼수인지라 그럴 경우엔 어떻게 대처할 수가 없어요.

    업하시면 제게도 알려주세요. 🙂

  5. 여기 또한...
    여기는 소스가 나와있네요... objs.length == undefined 해당 구문을
    typeof objs.length == 'undefined' 으로 바꿔보시면 될듯싶네요.

    ============================================
    ....
    if (objs == null || typeof objs.length == 'undefined') return;
    if (typeof W == 'undefined' || isNaN(parseInt(W))) W = 300;
    if (typeof H == 'undefined' || isNaN(parseInt(H))) H = 300;
    if (typeof T == 'undefined' || isNaN(parseInt(T))) T = parseInt((screen.height-H-30)/2);
    if (typeof L == 'undefined' || isNaN(parseInt(L))) L = parseInt((screen.width-W)/2);

    for (var i=0; i

  6. 빌 // 부지런히 알려주시는 것은 감사하오나...
    제 블로그 어딘가에서 얘기했듯이 IE 5.5 이하의 브라우저에 대한 지원계획은 없습니다. 제가 만든 초기의 스크립트들은 undefined 를 체크할때 typeof 를 썼지만 지금은 그렇지 않은 이유가 바로 그것입니다. 굳이 typeof 와 같은 것을 써주지 않아도 되거든요. 게다가 코드 자체가 5.0 버전의 IE 는 전혀 고려하지않고 만들었기 때문에 그것만 변경한다고 해서 잘 될지에 대한 보장도 해드릴 수 없습니다.
    결론은... 앞으로도 그냥 계속 typeof 를 안쓰고 undefined 를 체크할 것이라는 말이지요. 필요하신 분은 스스로... -_-)~

댓글을 남겨주세요

This site uses Akismet to reduce spam. Learn how your comment data is processed.