在使用触摸笔记本电脑/屏幕的 Chrome 中,拖放和 Dockbar 菜单不起作用
Drag-&-drop and Dockbar menu is not working in Chrome using touch laptop / screen
我一直在使用 Liferay 6.2.1 CE GA2
,这两个问题都可以在 Chrome 中重现(仅)。我还确认您会发现上述两个问题已在最新的 Liferay 6.2.5 CE GA6
上得到修复。我进一步深入研究并确定这些问题主要在 Liferay 6.2.2 CE GA3
.
中修复
我的问题是我无法找到解决这些问题的相关工单,因为我只需要这些修复(无法升级)。如果有人能指出确切的门票,将不胜感激。
非常感谢。
经过大量的研究和代码调试,我已经能够解决这两个问题。
想在这里分享我的发现,因为这可能对其他人有帮助。
- Unable to Drag-&-drop portlets:
修复: 将 alloy zip (\portal-web\third-party\alloy-2.0.0.zip
) 升级到 2.0.0.37
或更高版本可解决此问题。因为,这是 Liferay 6.2 GA2 - GA6
.
之间唯一的 zip 小升级
2 . Dockbar menus not clickable:
修复: 通过以下自定义 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 触控设备上/在触控笔记本电脑上使用鼠标重现。
我一直在使用 Liferay 6.2.1 CE GA2
,这两个问题都可以在 Chrome 中重现(仅)。我还确认您会发现上述两个问题已在最新的 Liferay 6.2.5 CE GA6
上得到修复。我进一步深入研究并确定这些问题主要在 Liferay 6.2.2 CE GA3
.
我的问题是我无法找到解决这些问题的相关工单,因为我只需要这些修复(无法升级)。如果有人能指出确切的门票,将不胜感激。
非常感谢。
经过大量的研究和代码调试,我已经能够解决这两个问题。 想在这里分享我的发现,因为这可能对其他人有帮助。
- Unable to Drag-&-drop portlets:
修复: 将 alloy zip (\portal-web\third-party\alloy-2.0.0.zip
) 升级到 2.0.0.37
或更高版本可解决此问题。因为,这是 Liferay 6.2 GA2 - GA6
.
2 . Dockbar menus not clickable:
修复: 通过以下自定义 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 触控设备上/在触控笔记本电脑上使用鼠标重现。