検索フォーム
最新記事
カテゴリ
最新コメント
月別アーカイブ

【JavaScript】クロスドメイン制限解除

JavaScriptは異なるドメインとの通信がセキュリティ上出来ない仕様となっている。
これをクロスドメインの制限というけど、この制限を解除する方法がいくつかある。
最も簡単な方法はPHPを中継する方法。
例えば、異なるドメインのコンテンツを取得したい場合、
以下のソースを記述したPHPファイルを用意する。
作成する場合は、文字コードをUTF-8で書くことに注意!

【getContents.php】

<?php
$url = "取得したいコンテンツのURL";
$html = file_get_contents($url);

//改行削除
$html = ereg_replace("\r|\n","",$html);

//HTMLエンティティに変換
$html = htmlentities($html ,ENT_QUOTES ,"UTF-8");

header("Content-type: application/x-javascript");
print <<<EOF
document.write("{$html}");
EOF;
?>



そして、取得したコンテンツをHTMLに埋め込みたい箇所に以下の一文を記述する。

<script type="text/javascript" src="getContents.php" charset="utf-8"></script>

<script type="text/javascript" src="~" charset="utf-8"></script>
実は、このタグはJavaScript以外のファイルを指定することが可能だったりする。
ここでPHPファイルを指定することで、PHPで取得したデータを埋め込むことが出来る。
当然ながら、ここで指定するファイルは別ドメインのPHPも指定可能。
その場合は、http://~から始まる絶対パスで指定すればOK。



また埋め込みタグにGETでパラメータを渡すことも可能。
例えば、埋め込みタグに以下のようにパラメータを付けると、

<script type="text/javascript" src="getContents.php?para=1" charset="utf-8"></script>

PHP側で、$_GET['para'] でパラメータを受け取ることが出来る。
どうでもいいことだけど、上の例では $_GET['para'] には「1」が入って来る。



PHP側ではいくつか注意点があり、
データを出力する前に、データに含まれる改行コードを除去する必要がある。
改行コードを除去しなければ、JavaScript側でエラーが起こってしまう。
それを防ぐために、PHP側では出力する前に改行削除の処理を行っている。

そして、もう一つの注意点としては、
出力するデータにシングルクォーテーションまたはダブルクォーテーションが含まれる場合、
PHP側でこれらの文字をHTMLエンティティに変換してあげる必要がある。



上記の2点を注意するだけで、このやり方でクロスドメインの問題を解決できる。
ただし、このやり方は相手から一方的にデータを取得したい場合のやり方。
双方向でのクロスドメイン間の通信をする場合は、Ajaxを使用する必要がある。
関連記事

テーマ: プログラミング
ジャンル: コンピュータ

コメント

非公開コメント

プロフィール

(*'ー')LP☆

Author:(*'ー')LP☆
 
ニコ生でゲーム実況生主として活動中!
基本的にレトロゲームを中心に
ゲーム実況をやっています(゚ー゚*)

放送開始のお知らせはツイッターに
流していますので、もし興味があれば
お気軽にフォローしてくださいな!
 

リンク
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示
QRコード
QR
アクセスランキング
[ジャンルランキング]
アニメ・コミック
1202位
アクセスランキングを見る>>

[サブジャンルランキング]
アニメ
566位
アクセスランキングを見る>>