Подавление ошибок отказа в разрешении в Javascript

У меня есть функция JS, которая опрашивает текущий URL-адрес в iframe, чтобы выяснить, указывает ли iframe на тот же сайт, что и основной документ. Таким образом, код в основном:

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]

Как я могу исправить свой код, чтобы избежать этих ошибок?

Спасибо, Мала


person Mala    schedule 18.08.2009    source источник


Ответы (2)


Обертывание вашего кода в try-catch Блок должен уметь отлавливать и обрабатывать эти ошибки.

person DanSingerman    schedule 18.08.2009
comment
Спасибо. Я понятия не имел, что JS поддерживает методологию try-catch. Ссылка была очень полезной, и теперь моя функция работает без ошибок :) - person Mala; 18.08.2009

На самом деле сообщение об ошибке — это информация, которую вы хотите: как только URL-адрес iframe указывает на другой домен, вы получаете ошибки разрешения. Это мера безопасности, позволяющая избежать XSS-атак.

[EDIT] Это означает, что вы можете заменить приведенный выше код на:

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

    // iframe src is currently local
  }
  catch (e)
  {
    // iframe src is currently not local
  }
}
person Aaron Digulla    schedule 18.08.2009
comment
Может ли обнаружение ошибки фактически подвергнуть вас XSS-атаке? На самом деле он не меняет разрешения, а просто очищает то, что видит пользователь. - person DanSingerman; 18.08.2009
comment
Аарон: спасибо, что убедился, что я осторожен. На самом деле мне не нужно сообщение об ошибке. В основном мой код теперь говорит set var location = false; попробуйте установить местоположение на URL-адрес iframe; если (местоположение) {делать что-то}. Таким образом, я почти уверен, что я в безопасности. DanSingerman прав - я просто ненавижу, когда сайты засоряют мою консоль ошибок ошибками (делает отладку моего JS при просмотре других сайтов болью в R-se = P), поэтому я стараюсь не делать этого с другими людьми. - person Mala; 18.08.2009