jQueryを使用して外部ドメインにあるRSSフィードを取得する際に問題が発生しました。Safariで動作していましたが、同一生成元ポリシーの制限($ .ajax()関数についても文書化されています)が原因で他のブラウザーでエラーが発生しました。
どうやって修正したのか知りたいですか?
jQueryを使用して外部ドメインにあるRSSフィードを取得する際に問題が発生しました。Safariで動作していましたが、同一生成元ポリシーの制限($ .ajax()関数についても文書化されています)が原因で他のブラウザーでエラーが発生しました。
どうやって修正したのか知りたいですか?
次のような単純な PHP スクリプトを作成しました。
<?php
/*
fetch.php fixes this issue: http://en.wikipedia.org/wiki/Same_origin_policy
Read more:
* http://api.jquery.com/jQuery.ajax/
* http://stackoverflow.com/questions/3595515/xmlhttprequest-error-origin-null-is-not-allowed-by-access-control-allow-origin
* http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domains
*/
// Requires URL
if ( !isset($_REQUEST['url']) || empty($_REQUEST['url']) ) exit( 'No url specified' );
// Set content-type
$type = 'application/rss+xml; charset=utf-8;';
if ( isset($_REQUEST['type']) && !empty($_REQUEST['type']) ) {
$type = urldecode($_REQUEST['type']);
}
// Adapted from http://www.howtogeek.com/howto/programming/php-get-the-contents-of-a-web-page-rss-feed-or-xml-file-into-a-string-variable/
function get_url_contents( $url ){
if ( function_exists('curl_init') ) {
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL, $url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
$ret = curl_exec($crl);
curl_close($crl);
return $ret;
} else {
return file_get_contents( $url );
}
return 'Could not retrieve url';
}
// Output content from url
header( 'Content-type: ' . $type );
echo get_url_contents( urldecode($_REQUEST['url']) );
?>
見た目はかなりゴミですが、現時点では十分に機能します。お役に立てば幸いです。