Установка location.href с относительным путем иногда приводит к неверному пути

Краткое резюме

Я работаю над проблемой, которая появляется в производстве, которую я не могу воспроизвести. В результате я отлаживаю это на основе отслеживания кода и просмотра журналов сервера. Точка сбоя - запрос одного сервлета с аргументами для другого сервлета. Это временная ситуация, после 2-3 попыток проблема исчезнет.

Детальное объяснение

Здесь есть три основных URL, первый из которых имеет форму

http://example.com/Apps/x9/HowdyServlet?argument=foo

И второе

http://example.com/Apps/x9/OtherServlet?argument=bar

И третий

http://example.com/Apps/servlet/MainServlet?thing=1

Затем у нас есть div, который является частью панели навигации на второй странице, которая выглядит следующим образом:

<div id="FrobberNav" 
 title="Navigate to Frobber" 
 class="top-navigation-button " 
 onmouseover="x9.topNav.mouseover(this);" 
 onmouseout="x9.topNav.mouseout(this);" 
 onclick="location.href='../servlet/MainServlet?thing=1'"
 style="float:right">
<a id="FrobberNavLink" 
   name="FrobberNavLink" 
   href="#" 
   onclick="return false;" 
   title="Navigate to Frobber">Frobber</a>
</div>

Немного связанного JavaScript для наведения мыши

x9.topNav.mouseover = function(element) {
  var mouseoverClasses = element.className + " top-navigation-button-hover";

  // update element classes
  element.className = mouseoverClasses;
};

x9.topNav.mouseout = function (element) {
  removeClass(element, 'top-navigation-button-hover');
};

Ошибка в том, что иногда, когда кто-то нажимает на это div они не переходят на URL #3, а отправляются на

http://example.com/Apps/x9/HowdyServlet?thing=1

Здесь важно отметить, что это "невозможный" URL, поскольку параметры поиска и сервлет были перепутаны.

Это Java-приложение, которое по большей части выполняет рендеринг страниц через RichFaces, управляемый Spring Web Flow. У нас не так много причудливого JavaScript, который бы переписывал эту страницу за моей спиной.

Вот где я скрежещу зубами

Я не могу воспроизвести эту ошибку на моем локальном компьютере или в нашей среде DEV или UAT. Я искал производственные журналы и вижу, что это происходит несколько раз в несколько дней. Производство работает на серверах iPlanet, которые обслуживают статический контент, а затем передают запросы приложений на некоторые серверы Weblogic. Я могу видеть неработающие запросы в логах iplanet, поэтому я знаю, что при входящем пути не происходит неправильная перезапись URL.

У меня есть свидетельство пользователя / тестера, что эту кнопку они пытались нажать, когда что-то пошло не так. Также нет других мест, где генерируется эта конкретная ссылка, кроме кода Java, который я могу идентифицировать.

Это почти похоже на location.href значение с первой страницы как-то затягивается и используется для создания новой ссылки. Есть ли такие гоночные условия?

Мой тестировщик может подтвердить, что это происходит в IE, а другие говорят, что это произошло как в Chrome, так и в Firefox.

0 ответов

Другие вопросы по тегам