обнаружение location.href в кадре - PullRequest
0 голосов
/ 15 ноября 2011

Я сталкиваюсь с проблемой на некоторых компьютерах, получающих доступ к моему веб-сайту, когда вызов функции пытается обнаружить location.href для фрейма, в то время как при изменении значения проблем нет.Рассматриваемый фрейм может указывать на разные сайты, которыми можно манипулировать, нажав на опцию в другом фрейме с помощью вызова, подобного следующему:

parent.frames[0].location.href="http://www.foo.com/bar.html";

, который отлично работает во всех случаях и меняет фрейм наподходящее место.Последующие попытки проверить, находится ли он в определенном месте, проваливаются для некоторых пользователей.Я пытаюсь проверить текущее местоположение фрейма с помощью:

if(parent.frames[0].location.href == "http://www.foo.com/bar.html")
{
    return true;
}

для некоторых из моих пользователей, однако, это вызывает ошибку, которая приводит к сбою фрейма и отображается в браузере Firefox (в разделе веб-разработчика / консоли ошибок) какmsgstr "невозможно обнаружить location.href".Тем не менее, он отлично работает для других пользователей, использующих тот же браузер.

Мой вопрос:

  1. Есть ли параметр, вызывающий эту ошибку, который клиент может установить, чтобы разрешить проверку местоположенияЗначения .href?
  2. Существует ли более надежный способ проверки местоположения, которое будет работать, несмотря на настройки?

Единственное, что я увидел в веб-поиске, который выглядел связанным, это программаназывается firebug, но клиент моего пользователя не использует эту программу.

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

У меня возникла аналогичная проблема со следующим кодом для разбивки кадра:

function breakout_of_frame()
{

    if (parent.frames.length > 0) {
        parent.location.href = self.document.location
    }
}

Я не нашел источник проблемы, но я нашел обходной путь, чтобы все заработало: я добавилнебольшая задержка.

    function sleep(milliseconds) {
      var start = new Date().getTime();
      for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
          break;
        }
      }
    }


function breakout_of_frame()
{
    sleep(500);
    if (parent.frames.length > 0) {
        parent.location.href = self.document.location
    }
}

Надеюсь, это поможет вам!

0 голосов
/ 15 ноября 2011

Firebug очень полезен для отладки. Всякий раз, когда я делаю AJAX или JavaScript, я всегда держу Firebug открытым. RE: обнаруживая местоположение страницы во фрейме, я бы лично использовал язык бэкэнда для чтения заголовков HTML, чтобы проверить детали страницы во фрейме. В PHP вы можете использовать $ _SERVER ['PHP_SELF'] среди других. Для отладки JavaScript я хотел бы воссоздать проблему на моей машине или на виртуальной машине.

...