0

http://www.developphp.com/view.php?tid=1248からハッキングされたこのJavaScriptのチャンクがあり、「未定義の変数-ブロードキャスト」というエラーが表示されます。

function cdtd(broadcast) {
    /* expected date format is Month DD, YYYY HH:MM:SS */
    var nextbroadcast = new Date(broadcast);
    var now = new Date();
    var timeDiff = nextbroadcast.getTime() - now.getTime();
    if (timeDiff <= 0) {
        clearTimeout(timer);
        document.getElementById("countdown").innerHTML = "<a href=\"flconlineservices.php\">Internet broadcast in progress<\/a>";
        /* Run any code needed for countdown completion here */
    }
    var seconds = Math.floor(timeDiff / 1000);
    var minutes = Math.floor(seconds / 60);
    var hours = Math.floor(minutes / 60);
    var days = Math.floor(hours / 24);
    hours %= 24;
    minutes %= 60;
    seconds %= 60;
    document.getElementById("daysBox").innerHTML = days + " d";
    document.getElementById("hoursBox").innerHTML = hours + " h";
    document.getElementById("minsBox").innerHTML = minutes + " m";
    // seconds isn't in our html code (javascript error if this isn't commented out)
    /*document.getElementById("secsBox").innerHTML = seconds + " s";*/
    var timer = setTimeout('cdtd(broadcast)',1000);
}

これでページから「ブロードキャスト」が渡されます<script type="text/javascript">cdtd("<?php echo $nextbroadcast; ?>");</script>。$ nextbroadcastは、ユーザーがページを表示した日時に基づいています。

var broadcast;、、、var broadcast = "";を試してみvar broadcast = null;ました。関数の前で変数を宣言しようとすると、スクリプトが壊れます。

私は何か間違ったことをしていますか?スクリプトは正常に機能していますが、エラーは発生しません。

4

2 に答える 2

2

これが問題の原因である可能性があります。

var timer = setTimeout('cdtd(broadcast)',1000);

var timer;上記の関数を宣言してから、関数のまたは関数のcdtd()で次のように設定する必要があります。

var func = 'cdtd(' + broadcast + ')';

timer = setTimeout(func,1000);
于 2012-07-03T22:04:36.573 に答える
2

次の行を変更します。

var timer = setTimeout('cdtd(broadcast)',1000);

これに:

var timer = setTimeout(function() { cdtd(broadcast); }, 1000);

于 2012-07-03T22:04:54.360 に答える