【问题标题】:Drag-&-drop and Dockbar menu is not working in Chrome using touch laptop / screen拖放和 Dockbar 菜单在使用触摸笔记本电脑/屏幕的 Chrome 中不起作用
【发布时间】:2016-04-12 18:20:27
【问题描述】:

我一直在使用Liferay 6.2.1 CE GA2,这两个问题都可以在 Chrome 中重现(仅)。我还验证了您会发现上述两个问题都已在最新的Liferay 6.2.5 CE GA6 上得到修复。我进一步深入研究并确定这些问题主要在 Liferay 6.2.2 CE GA3 中得到修复。

我的问题是我找不到修复这些问题的相关票证,因为我只需要这些修复(无法升级)。如果有人能指出确切的门票,将不胜感激。

非常感谢。

【问题讨论】:

  • “不工作”不是一个很好的可重现错误描述...感谢您试用 GA6 - 这将是我的第一个建议。由于难以重现(尤其是没有触摸屏,因为它似乎与此有关),因此屏幕录制可能是个好主意。
  • @OlafKock,here 是。
  • 抱歉,不知道。反问,因为您无法升级:您如何处理自旧版本以来已修复的安全问题?你自己向后移植它们吗?把时间花在升级到最新版本上可能会更好。
  • 是的,我们正在使用社区版本并自行修复问题。

标签: liferay liferay-6


【解决方案1】:

经过大量的研究和代码调试,我已经能够解决这两个问题。 想在这里分享我的发现,因为这可能对其他人有帮助。

  1. 无法拖放 portlet:

修复:将alloy zip (\portal-web\third-party\alloy-2.0.0.zip) 升级到2.0.0.37 或更高版本可解决此问题。因为,这是 Liferay 6.2 GA2 - GA6 之间唯一的 zip 小升级。

2 。 Dockbar 菜单不可点击:

修复:通过以下自定义 javascript hack 解决:

var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
var isChrome = !!window.chrome && !isOpera;

/* Run code, if application is running on touch device with chrome */
if(isTouchDevice() && isChrome){
    var docbar_dropdowns = 
        document.querySelectorAll('li.admin-links, li.my-sites, li.user-avatar');

    /* Attach click event */
    if(docbar_dropdowns.length > 0){    
        for(var d = 0; d < docbar_dropdowns.length; d++){
            docbar_dropdowns[d].addEventListener("click", toggleMenu, false);
        }
    }

    /* Toggle menu on click */
    var elementId = null;
    function toggleMenu(event){
        event.stopPropagation();
        if(elementId != null && elementId != this.id)
            hideMenu();

        elementId = this.id;

        if(this.children[1].style.display == "block"){
            this.classList.remove("open");
            this.children[1].style.display = "none";
        }else{
            this.classList.add("open");
            this.children[1].style.display = "block";
        }
    }

    /* Hide previously opened menu */
    function hideMenu(){
        for(var d = 0; d < docbar_dropdowns.length; d++){
            docbar_dropdowns[d].classList.remove("open");
            docbar_dropdowns[d].children[1].style.display = 'none';
        }
    }

    document.body.addEventListener("click", hideMenu, false);
}

/* Detect touch device */
function isTouchDevice() {
    return (('ontouchstart' in window)
    || (navigator.MaxTouchPoints > 0)
    || (navigator.msMaxTouchPoints > 0));
}

注意:在我们的环境中,这两个问题只能在触控设备上的 chrome 中/在触控笔记本电脑上使用鼠标时重现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多