0

最新の Webcam ショットhttp://cam.hackerspace.sg/last.jpgへの URL があり、たとえばソース ファイル名にリダイレクトされます。1364124301.jpg

エポック '1364124301' を Javascript で読み取りたいので、タイムスタンプに変換できます。img.src をログに記録すると、古い元の URL が表示されます。では、Jquery を使用せずに「1364124301」を取得するにはどうすればよいでしょうか。

ありがとう!

4

2 に答える 2

2

JavaScript だけを使用してリダイレクトの場所を取得することは不可能に思えます: XMLHTTPRequest はリダイレクトを透過的に隠し、別のドメインからの場合、iframe はその URL へのアクセスを許可しません。

PHP 対応の Web サイトをお持ちの場合は、次の方法でリダイレクトを取得できます。(すべてのコードは、簡単にするためにエラー状態をキャプチャしていません。使用する前にエラー処理を追加する必要があります)。

まず、リダイレクトの場所を取得するために、一部の PHP では、ファイルは getRedirect.php と呼ばれます。

<?php
$redirect = '';
$urlToQuery = $_GET['url'];
$urlParts = parse_url($urlToQuery);
$host = $urlParts['host'];
$path = $urlParts['path'];
$address = gethostbyname ($host);
$socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect ($socket, $address, 80);
$request = 'GET '.$path.' HTTP/1.1'."\r\n";
$request .= 'Host: '.$host."\r\n";
$request .= 'Connection: Close'."\r\n\r\n";
socket_write($socket, $request);
$answer = socket_read($socket, 8192);
socket_close($socket);
$answerLines = explode("\r\n", $answer);
foreach ($answerLines as $line) {
    $lineParts = explode(':', $line, 2);
    if($lineParts[0] == 'Location') {
    $redirect=trim($lineParts[1]);
    break;
    }
}
header('Content-Type: text/plain; charset=us-ascii');
header('Content-Length: '.strlen($redirect));
echo $redirect;
?>

次に、JavaScript を使用して画像を設定し、リダイレクト先をクエリする画像表示ページ (XMLHTTPRequest を介して getRedirect.php へ):

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
    function updateImage() {
    var imgParent = document.getElementById("imgContainer");
    // delete existing image if exists
    var imgChild = imgParent.firstChild;
    if(imgChild!=null) imgParent.removeChild(imgChild);
    // insert new image with actual redirect
    var newImg = document.createElement("img");
    newImg.src = "http://cam.hackerspace.sg/last.jpg";
    imgParent.appendChild(newImg);
    var redirect = getRedirect("http://cam.hackerspace.sg/last.jpg");
    var timestamp = redirect.substring(redirect.lastIndexOf("/") + 1, redirect.lastIndexOf("."));
    document.getElementById("imageDate").innerHTML="Timestamp="+timestamp;

    }
    function getRedirect(url) {
    var redirect = "";
    var req = new XMLHttpRequest();
    req.open('GET', 'getRedirect.php?url='+url, false);
    req.onreadystatechange = function () {
        if (req.readyState == 4) {
        redirect = req.responseText;
        }
    };
    req.send(null);
    return redirect;
    }
</script>
</head>
<body>
<button onclick="updateImage();">update image</button>
<div id="imgContainer"></div>
<p id="imageDate"></p>
</body>
</html>
于 2013-03-24T18:22:17.063 に答える