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)のコンテンツがページに読み込まれます。