同一生成元ポリシーにより、サーバー上にプロキシを作成してサイトにアクセスし、その可用性ステータスを返送する必要があります。たとえば、curlを使用します。
<?PHP
$data = '{"error":"invalid call"}'; // json string
if (array_key_exists('url', $_GET)) {
$url = $_GET['url'];
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
curl_close($handle);
$data = '{"status":"'.$httpCode.'"}';
if (array_key_exists('callback', $_GET)) {
header('Content-Type: text/javascript; charset=utf8');
header('Access-Control-Allow-Origin: http://www.example.com/');
header('Access-Control-Max-Age: 3628800');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
$callback = $_GET['callback'];
die($callback.'('.$data.');'); //
}
}
// normal JSON string
header('Content-Type: application/json; charset=utf8');
echo $data;
?>
これで、テストするURLを使用してそのスクリプトにアクセスし、JSONまたはJSONP呼び出しとして返されたステータスを読み取ることができます。
私が見つけたクライアントのみの最善の回避策は、サイトのロゴまたはファビコンをロードしてonerror / onloadを使用することですが、サイトがダウンしているか、ファビコン/ロゴを削除した場合にのみ、特定のページが欠落しているかどうかはわかりません。
function isValidSite(url,div) {
var img = new Image();
img.onerror = function() {
document.getElementById(div).innerHTML='Site '+url+' does not exist or has no favicon.ico';
}
img.onload = function() {
document.getElementById(div).innerHTML='Site '+url+' found';
}
img.src=url+"favicon.ico";
}
isValidSite("http://google.com/","googleDiv")