Как исправить бесконечный цикл в взломанной версии waitForKeyElements? - PullRequest
0 голосов
/ 14 мая 2018

Веб-сайт моей компании использует панель управления Metronic Horizontal Menu , но это более старая версия, в которой используется Gear вместо изображения и имени профиля пользователя . До Firefox 30 этот скрипт Greasemonkey работал и перемещал кнопки «Мой профиль» и «Выйти» под профилем / именем пользователя, сохраняя при этом «Мой календарь», «Мой почтовый ящик» и «Мои задачи». выпадающий значок Вот мой код Greasemonkey:

// ==UserScript==
// @name        Fix User Dropdown
// @description Fixes the user dropdown to match current version.
// @include     mywebsite.com
// @version     2.0.0
// @require         https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require         https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant               GM_addStyle
// @grant               GM.getValue
// ==/UserScript==
//- The @grant directives are needed to restore the proper sandbox.

waitForKeyElements (".topMenu1", addUserDropdown, true);

function addUserDropdown(jNode) {
  $('#greetingName').remove();
  var userSession = unsafeWindow.userSession;
  var userId = userSession.id;
  var firstName = userSession.firstName;
  var lastName = userSession.lastName;
  var fullName = firstName + ' ' + lastName;
  var accountId = userSession.accountId;

  $('.top-menu .nav').prepend(
        '<li class="dropdown dropdown-user dropdown-dark">' + 
            '<a data-close-others="true" data-hover="dropdown" data-toggle="dropdown" class="dropdown-toggle username username-hide-mobile floatRight" href="#" style="padding:10px;border-right:1px solid #000;margin:5px;">' + 
                fullName + 
            '</a>' + 
            '<ul id="userPersonalMenu" class="dropdown-menu dropdown-menu-default">' + 
                '<li>' + 
                    '<a href="/user/editor?id=' + userId + '&amp;accountId=' + accountId + '" id="greetingNameLink">' + 
                    '<i class="icon-settings"></i> My Profile </a>' + 
                '</li>' + 
                '<li>' + 
                    '<a href="/logout">' + 
                    '<i class="icon-key"></i> Log Out </a>' + 
                '</li>' + 
            '</ul>' + 
        '</li>');

  $('.dropdown-toggle').dropdownHover({});

  return null;
}

Вот что происходит:

username repeated multiple times

Он никогда не печатает «ОТМЕНА НАЙДЕНА», что, насколько я понимаю, противоречит логике, поскольку стек вызовов все еще должен разрешаться. Затем он продолжает рисовать имя пользователя (в данном случае «Ник») бесконечно по экрану справа налево, а затем сверху вниз.

Я надеялся, что установка bWaitOnce в значение true исправит это, но без кубиков.

1 Ответ

0 голосов
/ 17 сентября 2018

Я добавил:

// @require https://raw.githubusercontent.com/CWSpear/bootstrap-hover-dropdown/master/bootstrap-hover-dropdown.js

В начало моего пользовательского скрипта, чтобы получить самую последнюю версию выпадающего списка при наведении, и это сработало!

Мораль истории, проверьте, какие зависимости страниц использует ваш пользовательский скрипт, и убедитесь, что они совместимы с * Monkey.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...