jQuery.load () отвечает с ошибкой под Firefox, отлично работает под Chrome - PullRequest
3 голосов
/ 21 марта 2011

У меня есть функция, чтобы открыть страницу в диалоговом окне вместо основного окна.Немного очищенный код выглядит следующим образом:

var baseurl = window.location.origin + '/static/docs/'

function onClickLink(event) {
  event.preventDefault();
  if ($("#dialog").length == 0) {
    setUpDialog()
  }
  var href = event.target.href;
  href = baseurl + href.substring(1 + href.lastIndexOf('/'));
  $("#dialog").load(href + ' .body', function(response, status, xhr) {
    if (status == "error") {
      window.location = event.target.href;
    } else {
      changeImageSrc();
      reStructure();
    }
  });
  $("#dialog").dialog({
    modal: true,
    title: event.target.text,
    width: 960,
    position: ['center', 100]
  });
}

Этот код отлично работает в Chrome, но (status == "error") выполняется под Firefox.Кажется, в Firefox есть ошибка 404, это может быть изображение загруженной страницы или что-то подобное.

Есть идеи, как настроить поведение Chrome в Firefox?(Вы можете найти рабочий пример здесь )

Ответы [ 4 ]

10 голосов
/ 21 марта 2011
  1. В FireFox window.location.origin имеет значение undefined. FireFox устает, чтобы получить страницу:

    http://openerp.co.hu/hu/funkcionalis-bemutato/undefined/static/docs/sales.html

    и не удается

  2. В chrome, window.location.origin http://openerp.co.hu. Хромированные связи, чтобы получить страницу:

    http://openerp.co.hu/static/docs/sales.html

    и успешно

Вместо того, чтобы полагаться на window.location.origin, попробуйте использовать:

window.location.protocol + "//" + window.location.host
1 голос
/ 08 июня 2012

почему Firefox не поддерживает window.location.origin (это не стандартно)

ТЛ; др

иногда вам нужно это вместо ранее выбранного ответа:

var $window_location_origin = window.location.protocol+'//'+window.location.host;

Объяснение

Мне нужно получить длину window.location.origin aka window.location.protocol+'//'+window.location.host. Простая замена первого вторым не работает.

window.location.protocol+'//'+window.location.host.length вернет что-то вроде http://25, который является протоколом, и длина window.location.host объединена в конце.

Я обошел это, создав переменную, вот так:

var $window_location_origin = window.location.protocol+'//'+window.location.host;

После этого я мог бы получить длину $window_location_origin, которая была бы той оригинальной 25 (window.location.host.length) плюс 7 из window.location.protocol+'//', давая мне желаемые 32.

0 голосов
/ 21 марта 2011

404 означает «страница не найдена».

Установите точку останова и проверьте URL, который вызывает проблему.Это действительно так?

Может быть, Chrome более снисходительно относится к недопустимым символам в URL, чем Firefox или что-то в этом роде.Попробуйте вставить URL в адресную строку в обоих браузерах, чтобы увидеть, что вы получите.

0 голосов
/ 21 марта 2011

Есть ли какие-либо сообщения об ошибках, в частности? Кроме того, обновите ваш код с приведенными ниже:

var baseurl = window.location.origin  + '/static/docs/';

function onClickLink(event) {
    event.preventDefault();

    if($("#dialog").length==0) {
        setUpDialog();
    }

    var href = event.target.href;

    href = baseurl + href.substring(1+href.lastIndexOf('/'));

    $("#dialog").load(href + ' .body', function(response, status, xhr) {
      if (status == "error") {
        window.location = event.target.href;
      } else {
        changeImageSrc();
        reStructure();
      }
    });

    $("#dialog").dialog({
        modal:true, 
        title:event.target.text,
        width: 960,
        position: ['center', 100]
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...