表示は、console.log で行っています。各ブラウザの開発者ツールを 開いた状態でボタンをクリックして下さい。 IE : F12 => スクリプトタブ ( その後ページをリロード ) Firefox : Firebug のコンソール Chrome : CTRL + SHIFT + I からコンソール Safari : CTRL + ALT + I からコンソール ※ Opera は動きません 結局 IE8 用に prototype.js を改造するはめになりました。 テストした URL は、「Access-Control-Allow-Origin: *」 を返すように していますが、prototype.js 内で、ヘッダーを変更している為、 セキュリティ回避の為、そのままでは エラーになるのでsetRequestHeaders を無効にしています。( 偽装を拒否する為のようです )IE8 の場合、インターネットオプションで、「ドメイン間でのデータソースのア クセス」を有効にしてやると、Access-Control-Allow-Origin が無くても XMLHttpRequest でアクセスできるようになります。Access-Control-Allow-Origin の有無で制御したい場合は、XDomainRequest を使用する必要があります 但し、XDomainRequest は、XMLHttpRequestとでは、イベントに互換性が無いよう なのでこのような変更が必要になります。
<script type="text/javascript" src="http://lightbox.on.coocan.jp/prototype_x.js"></script> <script type="text/javascript"> Ajax.Request.prototype.setRequestHeaders = function() {} function testCall() { new Ajax.Request('http://lightbox.on.coocan.jp/ver.php', { method: "get", asynchronous: true, onComplete: function(response) { console.log(response.responseText); } }); } </script> <input type="button" value="実行" onclick='testCall();'>
以下は変更部分です
var Ajax = { getTransport: function() { return Try.these( function() {return new window.XDomainRequest()}, function() {return new XMLHttpRequest()}, function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')} ) || false; }, activeRequestCount: 0 }; -------------------------------------------- if ( Prototype.Browser.IE ) { var ieparam1 = this.options.onComplete; var ieparam2 = this.transport; this.transport.onload = function() { ieparam1(ieparam2) }; } else { this.transport.onreadystatechange = this.onStateChange.bind(this); }
関連する記事 prototype.js を クロスドメイン対応にするパッチ Google の prototype.js を使う ▼ クロスドメインで呼び出されるコード
<? header( "Access-Control-Allow-Origin: *" ); header( "Content-Type: text/javascript; Charset=shift_jis" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); $ver = phpversion(); print "document.write( '$ver' );"; ?>
|
【JavaScript ライブラリの最新記事】
- jQuery UI の datepicker の基本オプション
- JavaScript のみで、SHIFT_JIS や EUC-JP を UrlEncode に近い Escapeする Escape Codec Library
- カラーピッカーのライブラリなのですが、ちょっと雑な作りだったので、修正してリリースです。
- prototype.js で使っていたのをさらに短縮した IE かどうかの判断。
- google.load で Yahoo UI のメニューを使う
- prototype.js (1.6.1) : Browser プロパティ
- JavaScript : 誰でもすぐ使える Google 円グラフ(2) : データを Google ドキュメントから取得する
- JavaScript : 誰でもすぐ使える Google 円グラフ
- Google の prototype.js を使う
- prototype.js 内の getElementsByName の代わりになるメソッド
- prototype.js : $ 関数
- prototype.js : 1.6.1と1.7_rc2 の evalJSON の違い
- JavaScript : prototype.js(1.6.1) の Try.these と XMLHttpRequest
- SWFObjectでJ.parentNodeはNullまたはオブジェクトではありませんとエラーになる場合の対処方法('J.parentNode' is null or not an object.)
- prototype.js の Object.extend でプロパティを追加する
- prototype.js で、$(id) 関数が name 属性のみの場合 IE 以外で使え無いのをとりあえず使えるようにする