CGI-BBS > JAVA/JavaScript > JavaScript > CGIに組み込むと表示されない


カレッヂ
カレッヂ


質問者 みよし  投稿日 11/2(金) 18:40:56
HTMLでは表示できていたのに、
下記のようにCGIにScriptを読み込むと表示されなくなりました。
どこが悪いのかできれば教えてください。
よろしくお願いします。

print <<"END";
Content-Type: text/html

<html>
<head>
<title>あああ</title>
<body>

<SCRIPT LANGUAGE="JavaScript1.2">
<!--

var no = 6;
leaf = new Array();
leaf[0] = "images/icho.gif";        
leaf[1] = "images/icho2.gif";

var imgSize = 40;

var _ver=(document.all?3:(document.getElementById?1:(document.layers?2:0)));

var dx, xp, yp;
var am, stx, sty;
var i;

function getDocumentSize() {
    if(_ver == 1 || _ver == 2) {
        doc_width = self.innerWidth;
        doc_height = self.innerHeight;
    }
    if (_ver == 3) {
        doc_width = document.body.clientWidth;
        doc_height = document.body.clientHeight;
    }
}

getDocumentSize();

xp = new Array();
yp = new Array();
stx = new Array();
sty = new Array();
yx = new Array();
j = 0;

for (i = 0; i < no; ++ i) {
    xp[i] = Math.random()*(doc_width-imgSize);
    yp[i] = Math.random()*doc_height;
    stx[i] = Math.random()*4;
    sty[i] = 3 + Math.random()*2;

    if (_ver==2) {
        document.write("<layer name=\"dot"+ i +"\" left=\"15\" top=\"15\" visibility=\"show\"><img src=\"" + leaf[j] + "\" border=\"0\"></layer>");
    } else if (_ver==1 || _ver==3) {
        document.write("<div id=\"dot"+ i +"\" style=\"POSITION: absolute; Z-INDEX: "+ i +"; VISIBILITY: visible; TOP: 15px; LEFT: 15px; width:1;\"><img src=\"" + leaf[j] + "\" border=\"0\"></div>");
    }
    if (j == (leaf.length-1)) { j = 0; } else { j += 1; }
}

function leafLoop() {
    for (i = 0; i < no; ++ i) {
        yp[i] += sty[i];
        xp[i] += stx[i];
                if (yp[i] > doc_height-imgSize || xp[i] > doc_width-imgSize) {
            getDocumentSize();
            if (i%4) {
                xp[i] = Math.random()*(doc_width-imgSize);
                yp[i] = 0;
            } else {
                xp[i] = 0;
                yp[i] = Math.random()*(doc_height-imgSize);
            }
            stx[i] = 1 + Math.random()*5;
            sty[i] = 4 + Math.random()*2;
        }
        leafMove("dot"+i,yp[i],xp[i]);
    }
    setTimeout("leafLoop()", 30);
}

function leafMove(lay,t,l) {
    if (_ver == 1) {
        document.getElementById(lay).style.top  = t;
        document.getElementById(lay).style.left = l;
    }
    if (_ver == 2) {
        document.layers[lay].top = t;
        document.layers[lay].left = l;
    }
    if (_ver == 3) {
        document.all[lay].style.pixelTop = t;
        document.all[lay].style.pixelLeft = l;
    }
}

if (_ver) {
    leafLoop();
}

//-->
</SCRIPT>

</body>
</html>
回答者 呑兵衛@大阪  [削除]  投稿日 11/2(金) 20:00:06
     if (_ver==2) {
         document.write("<layer name='dot"+i+"' left='15' top='15' visibility='show'><img src='"+leaf[j]+"' border='0'></layer>");
     } else if (_ver==1 || _ver==3) {
         document.write("<div id='dot"+i+"' style='POSITION: absolute; Z-INDEX: "+i+"; VISIBILITY: visible; TOP: 15px; LEFT: 15px; width:1;'><img src='" + leaf[j] + "' border='0'></div>");
     }

です。
回答者 あけび  [削除]  投稿日 11/2(金) 21:57:40
print <<"END";
では、ヒアドキュメント内のエスケープ文字やperl変数が評価されて
結果が変わってしまいます。
print <<'END';
と、シングルクォートで括れば
単純に元のHTMLのまま表示されるようになります。

#ヒアドキュメント終端の END が無いのは
#単に書き込み忘れですよね?
質問者 みよし  [削除]  投稿日 11/5(月) 09:20:44
 呑兵衛@大阪 さん あけび さんレスありがとうございます。
CGIもScriptも動くようになりました。
どうもありがとうございました。 

このページは終了したので返信(回答)は書きこめません

Web裏技