代码之家  ›  专栏  ›  技术社区  ›  NobleUplift

如何修复waitforkeyements的黑客版本中的无限循环?

  •  0
  • NobleUplift  · 技术社区  · 6 年前

    我公司的网站使用 the Metronic Horizontal Menu admin panel ,但它是一个旧版本,使用齿轮代替 the user profile picture and name 。在Firefox 30之前,这个Greasemonkey脚本可以正常工作,它会在用户配置文件/名称下移动“我的配置文件”和“注销”按钮,同时将“我的日历”、“我的收件箱”和“我的任务”保留在gear图标下拉列表中。这是我的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

    它从未打印过“CANCEL FOUND”,就我而言,这违反了逻辑,因为调用堆栈仍然应该解析。然后,它继续从右到左,再从上到下无限地在屏幕上绘制用户名(“示例中的尼克”)。

    我希望将bWaitOnce设置为true可以解决这一问题,但不是掷骰子。

    1 回复  |  直到 6 年前
        1
  •  0
  •   NobleUplift    6 年前

    我补充道:

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

    到我的用户脚本顶部获取最新版本的悬停下拉列表,它成功了!

    故事的寓意是,检查用户脚本使用的页面依赖项,并确保它们与*Monkey兼容。

    推荐文章