2009-08-18 13 views
8

Ho una funzione JS che esegue il polling per l'url corrente in un iframe, allo scopo di accertare se l'iframe punta o meno allo stesso sito del documento principale. Come tale, il codice è fondamentalmente:Errori di "autorizzazione negata" in 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 
    } 
} 

Funzionalmente, questo codice funziona perfettamente. Tuttavia, nella console degli errori, ogni volta che questa funzione viene chiamata e lo src IFRAME non è locale ottengo un errore:

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

Come posso risolvere il mio codice per evitare questi errori?

Grazie, Mala

risposta

12

avvolgendo il codice in un blocco try-catch dovrebbero essere in grado di catturare e trattare con questi errori.

+0

Grazie. Non avevo idea che JS supportasse la metodologia try-catch. Il collegamento è stato molto utile e la mia funzione ora funziona senza errori :) – Mala

0

In realtà, il messaggio di errore è l'informazione desiderata: non appena l'URL dell'iframe punta a un dominio diverso, si ottengono errori di autorizzazione. Questa è una misura di sicurezza per evitare XSS attacks.

[EDIT] Questo significa che è possibile sostituire il codice precedente con:

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

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

Tuttavia, l'errore XSS può effettivamente esporre l'utente a un attacco XSS? In realtà non sta cambiando i permessi, ma sta semplicemente disinfettando ciò che l'utente vede. – DanSingerman

+1

Aaron: grazie per essere sicuro di stare attento. In realtà, non ho davvero bisogno del messaggio di errore. Fondamentalmente il mio codice ora dice "set var location = false; prova a impostare il percorso in url di iframe; if (location) {do stuff}". In quanto tale, sono abbastanza sicuro di essere al sicuro. DanSingerman è corretto - lo odio solo quando i siti impantanano la mia console degli errori con errori (fa il debug del mio JS mentre navigo su altri siti un dolore nell'R-se = P) quindi sto cercando di evitare di farlo ad altre persone. – Mala

+1

@DanSingerman: Certo che no. Vedi le mie modifiche. –

Problemi correlati