2009-08-18 7 views
8

J'ai une fonction JS qui interroge l'URL actuelle dans un iframe, le but étant de vérifier si l'iframe pointe vers le même site que le document principal. En tant que tel, le code est fondamentalement:Suppression des erreurs "autorisation refusée" en 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 
    } 
} 

Fonctionnellement, ce code fonctionne parfaitement. Cependant, dans la console d'erreur, chaque fois que cette fonction est appelée et l'iframe src Je n'obtiens une erreur locale:

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

Comment puis-je réparer mon code pour éviter ces erreurs?

Merci, Mala

Répondre

12

Emballage votre code dans un bloc try-catch devraient pouvoir attraper et faire face à ces erreurs.

+0

Merci. Je n'avais aucune idée que JS soutenait la méthodologie de l'essai. Le lien a été très utile et ma fonction fonctionne maintenant sans erreur :) – Mala

0

En fait, le message d'erreur est l'information que vous voulez: Dès que l'URL de l'iframe pointe vers un domaine différent, vous obtenez des erreurs d'autorisation. Ceci est une mesure de sécurité à éviter XSS attacks.

[EDIT] Cela signifie que vous pouvez remplacer le code ci-dessus:

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

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

Peut-être attraper l'erreur vous expose réellement à une attaque XSS si? Il ne modifie pas réellement les autorisations, il suffit de nettoyer ce que l'utilisateur voit. – DanSingerman

+1

Aaron: merci de m'assurer que je fais attention. En fait, je n'ai pas vraiment besoin du message d'erreur. Fondamentalement, mon code dit maintenant "set var location = false, essayez de définir l'emplacement de l'URL de iframe, if (location) {do stuff}". En tant que tel, je suis sûr que je suis en sécurité. DanSingerman est correct - je déteste juste que les sites enlèvent ma console d'erreur avec des erreurs (fait que je débogue mon JS en surfant sur d'autres sites, ça me fait mal dans le R-se = P) alors j'essaie d'éviter cela aux autres. – Mala

+1

@DanSingerman: Bien sûr que non. Voir mes modifications. –

Questions connexes