2009-08-18 698 views
8

Tengo una función JS que sondea la URL actual en un iframe, con el propósito de determinar si el iframe apunta al mismo sitio que el documento principal. Como tal, el código es básicamente:Suprimir los errores de "permiso denegado" 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 
    } 
} 

Funcionalmente, este código funciona perfectamente. Sin embargo, en la consola de errores, cada vez que esta función se llama y el iframe src no es local consigo un error:

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

¿Cómo puedo arreglar mi código para evitar estos errores?

Gracias, Mala

Respuesta

12

Envolver su código en un bloque try-catch deben ser capaces de atrapar y hacer frente a estos errores.

+0

Gracias. No tenía idea de que JS apoyara la metodología de capturar trampas. El enlace fue muy útil y mi función ahora funciona sin errores :) – Mala

0

En realidad, el mensaje de error es la información que desea: tan pronto como la URL del iframe apunta a un dominio diferente, obtiene errores de permiso. Esta es una medida de seguridad para evitar XSS attacks.

[EDIT] Esto significa que puede reemplazar el código anterior con:

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

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

¿Puede atrapar el error de hecho exponerlo a un ataque XSS? En realidad, no está cambiando los permisos, solo desinfecta lo que el usuario ve. – DanSingerman

+1

Aaron: gracias por asegurarme de estar siendo cuidadoso. En realidad, realmente no necesito el mensaje de error. Básicamente, mi código ahora dice "establecer var location = false; intentar establecer la ubicación en url of iframe; if (location) {do stuff}". Como tal, estoy bastante seguro de estar a salvo. DanSingerman tiene razón: Odio que los sitios bloqueen mi consola de errores con errores (hace que la depuración de mi JS mientras navegas por otros sitios sea un problema en el R-se = P), así que estoy tratando de evitar hacerle eso a otras personas. – Mala

+1

@DanSingerman: por supuesto que no. Ver mis ediciones –