jQuery – 制限付きURIへのアクセスが拒否されました – 解決策
問題
このjQueryエラーメッセージは、クロスドメインコンテンツの読み込みによって発生します。
Error:[Exception... "Access to restricted URI denied" code: "1012" nsresult: "0x805303f4 (NS__ERROR__DOM__BAD__URI)"
それはあなたのサイトに属していないか、あなたのサイトにあるコンテンツ(別のドメイン名)をロードしていることを意味します。オンデマンドでクロスドメイン(yahoo.com)コンテンツをロードするには、このjQueryの例を参照してください。
<html> <head> <script type="text/javascript" src="jquery-1.4.2.min.js"></script> <style type="text/css"> #content{ border:1px solid blue; margin:16px; padding:16px; } </style> </head> <body> <div id="msg"></div> <div id="content"> </div> <br/> <button id="load">Load yahoo.com</button> <script type="text/javascript"> $('#load').click(function(){ $('#msg').text("Loading......"); $('#content').load("http://www.yahoo.com", function() { $('#msg').text(""); }); }); </script> </body> </html>
しかし、これは動作しません。「ロード」ボタンをクリックすると、何もしませんが、「制限されたURIへのアクセスが拒否されました」というエラーメッセージが表示されます。 ** JavaScriptのセキュリティ上の制約のため、クロスドメインコンテンツを読み込むことはできません。
解決策
ダーティな回避策があります – サーバー側の言語でクロスドメインコンテンツを入手してください。たとえば、 “proxy.php”という名前の1行のphpファイルを作成します。
<?php echo file__get__contents($__GET['url']);?>
jQuery側では、ロード関数を次のように変更します。
$('#load').click(function(){ $('#msg').text("Loading......"); $('#content').load("proxy.php?url=http://www.yahoo.com", function() { $('#msg').text(""); }); }); </script>
これで、「読み込み」ボタンをクリックすると、必要に応じてクロスドメイン(yahoo.com)のコンテンツがページに読み込まれます。