質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

6回答

4307閲覧

JavaScriptでHTMLを取得する動くコード求む

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

0クリップ

投稿2020/03/13 03:16

編集2020/03/13 05:10

下記はJavaScriptでGETリクエストを送信する、ネットで拾ったコードです。

↓調査したこと・試したこと

JavaScript

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5</head> 6<body> 7<script> 8var theUrl = "https://www.google.com"; 9 10function httpGetAsync(theUrl, callback) 11{ 12var xmlHttp = new XMLHttpRequest(); 13xmlHttp.onreadystatechange = function() { 14if (xmlHttp.readyState == 4 && xmlHttp.status == 200) 15callback(xmlHttp.responseText); 16} 17xmlHttp.open("GET", theUrl, true); // true for asynchronous 18xmlHttp.send(null); 19} 20 21function callback(text){ 22console.log(text); 23} 24 25httpGetAsync(theUrl, callback); 26</script> 27</body> 28</html>

しかし、エラーが出ます:

Access to XMLHttpRequest at 'https://www.google.com' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

実行環境:
上記のファイルをindex.htmlという名前で保存してchromeで開きます。

「ターゲットのURLにGETリクエストを送信し、HTMLコードを取得する」というだけの、実際に動くコードを教えていただけませんか?ネットに落ちてるすべてのコードでエラーが発生するようです。

s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/03/13 03:18

CORS という絶対的なキーワードがあります。 これについて調べられてませんか? コピペで動くものだけ求めても何もできあがりませんし、そもそも質問になってません。 しかるべきところにしかるべき対価を支払ってやってもらってください
退会済みユーザー

退会済みユーザー

2020/03/13 03:19

とりあえず環境を整備してください →「CORS policy」
m.ts10806

2020/03/13 03:28

コミュニケーション放棄して意味不明な発言をしたとして通報しました。
退会済みユーザー

退会済みユーザー

2020/03/13 03:30

そもそも動くコードつきの回答があるところからひっぱってきてるのに、何がほしいのか意味不明
miyabi_takatsuk

2020/03/13 03:41 編集

環境の記載をお願いします。 ローカルで、httpアクセスでない可能性が非常に高いので。 それを確認しないと回答しようがありません。 また、タイトルは変えた方がいいかと。 m.ts10806さんがおっしゃる通り、丸投げ作業依頼にしか見えません。
退会済みユーザー

退会済みユーザー

2020/03/13 04:46

@asahina1979 動きませんよ、そのコード。私が貼ったソースコードをコピペして試してください。動きませんから。
退会済みユーザー

退会済みユーザー

2020/03/13 04:50

ここまで正解者なし。「ターゲットのURLにGETリクエストを送信し、HTMLコードを取得する」。こんな単純なことがなぜできないのか?
m.ts10806

2020/03/13 05:02

作業依頼を請け負う場所でも、ガイドラインを無視してオレオレルールを貫く人をフォローする場所でもないですからね。 自分が王様になりたいのなら他所でどうぞ。
miyabi_takatsuk

2020/03/13 05:08 編集

あの・・・。 単純なことがなぜできない、と仰るなら、なんで質問してるんですか。。。 その単純なことができてないから、質問しているんですよね? 回答がつかないのは、構文以外に原因があるのが明白だからです。 それなのに、実行環境の記載がないから正答の回答つかないんですよ。 (yambejpさんの回答が正答ですが) 十中八九実行環境が原因です。 だから、環境を教えて下さい、と言ってるんです。
退会済みユーザー

退会済みユーザー

2020/03/13 05:07

HTMLファイルなのだから環境は上記のファイルをindex.htmlという名前で保存してchromeで開くだけです。
miyabi_takatsuk

2020/03/13 05:09

そのことを質問本文に記載して下さい。
miyabi_takatsuk

2020/03/13 05:28

m.ts10806さん > 私はまたお人好ししてしまいましたね・・・。 編集で見えなくなってますが、ローカルサーバー立ててるぽいですしね。 原因わかってて、からかってきてる感もある気もしてきました。 (それは流石に偏見か)
guest

回答6

0

だめです。JavaScriptの本を1冊買うか、金を払って教師を雇うのがいいと思います。

https://teratail.com/questions/246619#reply-357337

投稿2020/03/13 03:49

kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/03/13 03:50

そう、ブーメラン刺さってるんですよね・・・。
guest

0

CORSに引っかかっているものは参照サイト側が対応しないと解決できません。
どうしてもというならご自身でサーバーサイドのクローラを用意し
ワンクッション置くことくらいでしょうか・・・

投稿2020/03/13 03:19

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/13 03:27

ブラウザ上でやろうとしてるから無理ということですか?グローバルIPがあれば可?
kyoya0819

2020/03/13 03:41

PHPをクッションにすればできる気はします。グローバルIP云々は意味不明です。
退会済みユーザー

退会済みユーザー

2020/03/13 04:43

@auchi0819 分からないなら沈黙してください。「気はします」とかイラネ。
yambejp

2020/03/13 04:55

> @auchi0819 分からないなら沈黙してください LGBTさんもそのニュアンスがわからないなら沈黙した方がいいですよ。 PHPをクッションにしたらできますよ。 私の回答にも同等のことがすでに書いてありますよね?
退会済みユーザー

退会済みユーザー

2020/03/13 04:56

@yambejp 質問者を沈黙させたらQ&Aサイトが成り立たないんですが・・・(驚愕)。回答者がしゃべりたいことを喋ってるだけという言葉のドッチボール。
yambejp

2020/03/13 04:59

質問をするなということではありません 回答者の回答が理解できないなら嫌味を言うなということです
kyoya0819

2020/03/13 05:10

> @auchi0819 分からないなら沈黙してください。「気はします」とかイラネ。 要件詳細知らないんだから断言できないだろ。 もしくはブーメランが刺さってしまい激おこぷんぷん丸系でしょうか?
退会済みユーザー

退会済みユーザー

2020/03/13 05:34 編集

@yambejp 質問者が理解できない"回答"をぶつけることが回答として成立するんでしょうか。まあ理解できたのでベストアンサーにします(追記:他にいい回答があったので外しました)。 @asuchi0819 あなたはもういいので落ち着いてください。
guest

0

最近のブラウザでは、
ローカル上の実行(HTMLファイルのダブルクリック等でHTMLをブラウザで表示)は、
CORSに引っかかる(ブラウザ側のクロスドメインセキュリティ)ので、
httpリクエスト系の処理は弾かれます。
(今回のXMLHttpRequestも同様)
なので、本質問の処理は、セキュリティに引っかかり実行できないので、構文が原因ではありません。
httpアクセスで実行しないと、それらの処理を行うことはできません。

方法として、下記が挙げられます。

  • Webサーバーに上げてアクセス
  • ローカルサーバーを立てて、httpアクセスとして、本質問処理を行う

後者に関しては、
XAMPP、MAMPなどのアプリケーションが代表的なので、ご自分で調べて使用するとよいでしょう。

投稿2020/03/13 05:17

miyabi_takatsuk

総合スコア9528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

当方の環境では問題なく動作しました

投稿2020/03/13 05:47

編集2020/03/13 05:48
Lhankor_Mhy

総合スコア35871

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/03/13 05:49

マジかすげぇ
Lhankor_Mhy

2020/03/14 03:16

> マジかすげぇ LGBTさんが「こんな単純なこと」とまで言い切るほど容易にできると思っていたことについて、4人の回答者に「できない」と否定されていて、その上で私が「できる」と回答したのですが、コメントはそれだけですか? その方法には興味がない、ということでいいですか? 本当は、これが「できない」ことを知っていて、私の回答に対して「できるわけがない」と思っているのではありませんか? つまり、一言で言うと「釣れますか?」ってことです。
kyoya0819

2020/03/16 13:00

上のコメントでは否定しましたが、よく良く考えればできますね。
退会済みユーザー

退会済みユーザー

2020/03/17 00:14

一人釣れてますね。
guest

0

ベストアンサー

動かない理由を調べれば対応方法わかると思うのですが・・・

CORS

domain-a.comから取得したHTMLで、domain-b.comにアクセスできません。


消されてますが、せっかくなので。

サーバサイドならできるという話があったのでpythonの簡易サーバを動かしましたが(python -m http.server)無理でした。

自前で簡易サーバをたてたなら、httpで自前サーバにアクセスして、当該javascriptの記述されたファイル(index.html)にアクセスしてください。

javascript

1theUrl = "https://www.google.com";

の部分は、自分で配置したindex.htmlを指定してください。

ちなみに、自分のサイトでなく、https://www.google.comの結果取得したい場合は、
サーバサイドでhttpアクセスするプログラム(PHPでもPythonでもなんでもいいです)を用意して

javascript

1theUrl = "自分で作ったプログラム?param=https%3A%2F%2Fwww.google.com";

みたいな仕組み(ワンクッション)を作る必要があります。

投稿2020/03/13 05:18

編集2020/03/13 05:31
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/03/13 05:23

編集で隠れてて、実はローカルサーバー立ててたんですか・・・。 見とけばよかったですね・・・。
momon-ga

2020/03/13 05:29

でも、ローカルサーバーたてても、そもそもの意味わかってないとなんとも・・・
miyabi_takatsuk

2020/03/13 05:33

確かに、質問修正依頼のやりとりを見ると、せっかくローカルサーバー立ててるのに、 index.htmlダブルクリックしてそうな気がします。
m.ts10806

2020/03/13 06:07

>ネットに落ちてるすべてのコードでエラーが発生するようです。 と書くような人が正しい環境を正しく使ってるように思えない。 記事も自分の理解が及ばない場所は全部読み飛ばしてる感すらある。解説全く読まず理解せずコードだけとってきたんでしょうね。
m.ts10806

2020/03/13 06:08

そして「実際に動くコード」かどうかこの回答をちゃんと検証したかも怪しい。
guest

0

結論

できます。

方法

1, PCにVirtualBoxなり、そこら辺の適当なソフト入れて適当にサーバー立ててください。
2, そしたら、そこにIPで接続できるように設定したのち、Windowsの設定をいじって www.google.comとそのIPを紐づけてください。
3, 自己証明書周りの設定を適当にやってください。
4, さっき立てた仮想のサーバーに質問のコードを入れて、アクセスすればあら不思議。できちゃいます。

尚、この方法は德丸本の方法をもとにしていますので2までやりましたが、それ以降はめんどくさいのでやってません。

投稿2020/03/17 04:19

編集2020/03/17 04:30
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oikashinoa

2020/03/18 14:29

オプションだけでも行けますよ chrome --allow-file-access-from-files --allow-file-access --allow-cross-origin-auth-prompt --disable-web-security --user-data-dir="C:\Users\xxxxx\AppData\Local\Google\Chrome\User Dataは指定する必要あり"
kyoya0819

2020/03/18 14:31

(もちろん拡張機能とかあることは知っています。 (半分ネタで半分本気ですので、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問