2009-08-18 5 views
8

iframeがメイン文書と同じサイトを指しているかどうかを確認する目的で、iframeの現在のURLをポーリングするJS関数があります。したがって、コードは基本的に:Javascriptの「許可が拒否されました」エラーを抑制する

function urlCheck() 
{ 
    var location = document.getElementById('frameid').contentWindow.location.href; 
    if (location) 
    { 
    // iframe src is currently local 
    } 
    else 
    { 
    // iframe src is currently not local 
    } 
} 

機能的には、このコードは機能します。しかし、エラーコンソールで、毎回この関数が呼び出されるとiframeのsrcが、私はエラーを取得するローカルではありません。

Permission denied for [site1] to get property Location.href from [site 2]

どのように私はこれらのエラーを回避するために、自分のコードを修正することができますか? try-catchブロックでコードをラップ

おかげで、 マラ

答えて

12

はキャッチし、これらのエラーに対処することができるはずです。

+0

ありがとうございました。私はJSがtry-catch方法論をサポートしているとは考えていませんでした。リンクは非常に役立ち、私の関数は現在エラーフリーで動作します:) – Mala

0

実際には、エラーメッセージは必要な情報です。iframeのURLが別のドメインを指すと、許可エラーが発生します。これはXSS attacksを避けるための安全対策です。

[EDIT]これは、あなたがして上記のコードを置き換えることができます意味:

function urlCheck() 
{ 
    try 
    { 
    document.getElementById('frameid').contentWindow.location.href; 

    // iframe src is currently local 
    } 
    catch (e) 
    { 
    // iframe src is currently not local 
    } 
} 
+1

エラーを捕まえることは実際にXSS攻撃にさらされますか?彼は実際にパーミッションを変更しておらず、ユーザーに表示されている内容を消さないだけです。 – DanSingerman

+1

Aaron:私が注意していることを確認してくれてありがとう。実際には、私は本当にエラーメッセージは必要ありません。基本的に私のコードでは、 "set var location = false; iframeのurlに位置を設定しようとします; if(location){do stuff}"と表示されます。そういうわけで、私は安全だと確信しています。 DanSingermanは正解です。サイトでエラーが発生したときにエラーコンソールが暴走すると(JSをデバッグして他のサイトをR-se = Pに苦労させてしまう)、他の人にやってしまうのを避けようとしています。 – Mala

+1

@DanSingerman:もちろんではありません。私の編集を参照してください。 –

関連する問題