• 締切済み

外部ウェブサイトの最終更新日時の自動確認方法

javascript で、指定されたアドレスのウェブサイトの 最終更新日を取得する方法が分かりません。 Document.lastModified を自分のページ内部で用いるのではなく 外部のページ変更確認方法として コードを作成したいのですが 方法が分かりません。 --- 指定先のURLのページ内容が変更されたかどうかを知りたい場合は、 XMLHttpRequest() API について読め --- という説明がありましたが いったい、どんなコードを書けば良いのか見当もつきません。 ご指導のほどよろしくお願いします。

みんなの回答

  • luka3
  • ベストアンサー率72% (424/583)
回答No.2

>教えていただいたスクリプトをブラウザ上で実行しましたが 前の回答に書きましたが、こちらはブラウザ用ではありません。 WindowsのWSH(Windows Script Host)用に作ったスクリプトで、通常WScript.exeに関連付けされており(test.jsなどの名前で保存して)ダブルクリックすることで実行できます。 Web用に書くと var url = "http://example.com/"; var xhr = new XMLHttpRequest(); xhr.open("HEAD", url, false); xhr.send(); alert(xhr.getResponseHeader("Last-Modified")); となるかと思いますが、実際動かそうとしても動きませんね。 『CORS policy』違反でブロックされるようです。 https://qiita.com/higakin/items/fabe6a23d564b20ad558 通常このエラーはサーバー側に許可の設定が必要なようですので、最近のブラウザを使う限り、JavaScriptで別のサーバーのデータを直接取得するというのは無理なようです。 別の手段としては、これを中継するサーバーがあればいいかもしれません。

o45t92
質問者

お礼

ご回答ありがとうございます。 とても難解なことが分かりました。 JScript は、一度も使用したことがないため 何とか初歩から手をつけようかと思いますが どこから学べばよいのか、検索しても見当がつきませんでした。 唯一、見つけた情報は JScript は javascript と互換性がある という記載でしたが、 どうやら、この記述は対象がとても限定されているように思えました。 よろしくお願いいたします。

  • luka3
  • ベストアンサー率72% (424/583)
回答No.1

最終更新日はレスポンスヘッダの『Last-Modified』にあります。 https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Last-Modified このパラメータがほしい場合、コンテンツ本体は不要なので、GETではなくHEADメソッドを使った方がいいと思います。 Web用のJavaScriptではなく、WindowsのJScriptの表示サンプルです。 test.jsなどの名前で保存してダブルクリックすると『Thu, 17 Oct 2019 07:18:26 GMT』と表示されるはずです。 var url = "http://example.com/"; var xml2 = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); xml2.open("HEAD", url, "False"); xml2.send(); WScript.Echo(xml2.getResponseHeader("Last-Modified")); 実際に試すとわかりますが、動的コンテンツの場合はLast-Modifiedのパラメータが存在しない場合がほとんどです。 (Last-Modifiedがない場合に、最終更新日がアクセス日時になるのか、別のパラメータを使うのかは不明です) サイトからどのようなレスポンスヘッダが返ってくるかは、curlコマンドを使うといいです。Windowsでも使えます。 curl --head http://example.com/ でレスポンスヘッダが表示されます。 参考:cURLコマンドでレスポンスヘッダのみを取得 https://qiita.com/yousan/items/fcc15e1046939c465ab7

o45t92
質問者

お礼

御回答いただき、ありがとうございました。 教えていただいたスクリプトをブラウザ上で実行しましたが Uncaught ReferenceError: ActiveXObject is not defined というエラーが発生しました。

関連するQ&A