Mac Pro Mavericks 10.9、Chrome 30.0.1599.101、GWT 2.5.1、Tomcat 7.0.42
下面的 gwt 代码打印出前两行的非整数值(!!),接下来的 4 行似乎总是打印整数(如预期的那样)......
public class EntryPt implements EntryPoint
{
Logger logger = Logger.getLogger("MacChrome");
@Override
public void onModuleLoad()
{
SimplePanel panel = new SimplePanel();
panel.getElement().getStyle().setProperty("border", "5px solid red");
panel.setPixelSize(500, 500);
panel.addDomHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
logger.log(Level.SEVERE, "" + event.getX());
logger.log(Level.SEVERE, "" + event.getY());
logger.log(Level.SEVERE, "" + event.getClientX());
logger.log(Level.SEVERE, "" + event.getClientY());
logger.log(Level.SEVERE, "" + event.getScreenX());
logger.log(Level.SEVERE, "" + event.getScreenY());
}
}, ClickEvent.getType());
RootPanel.get().add(panel);
}
}
在同一台机器/浏览器/等上,以下所有打印整数...
<!DOCTYPE HTML>
<HTML>
<HEAD>
<TITLE>Mouse Test</TITLE>
<SCRIPT>
function initialise() {
var elem = document.getElementById("mydiv");
elem.addEventListener("click", doMouseClick, false);
}
function doMouseClick(e) {
var evt = e ? e : window.event;
var clickX = 0, clickY = 0;
if ((evt.clientX || evt.clientY) && document.body
&& document.body.scrollLeft != null) {
clickX = evt.clientX + document.body.scrollLeft;
clickY = evt.clientY + document.body.scrollTop;
}
if ((evt.clientX || evt.clientY) && document.compatMode == 'CSS1Compat'
&& document.documentElement
&& document.documentElement.scrollLeft != null) {
clickX = evt.clientX + document.documentElement.scrollLeft;
clickY = evt.clientY + document.documentElement.scrollTop;
}
if (evt.pageX || evt.pageY) {
clickX = evt.pageX;
clickY = evt.pageY;
}
alert(evt.type.toUpperCase() + ' mouse event:' + '\n pageX = ' + clickX
+ '\n pageY = ' + clickY + '\n clientX = ' + evt.clientX
+ '\n clientY = ' + evt.clientY + '\n screenX = ' + evt.screenX
+ '\n screenY = ' + evt.screenY)
}
function doMouseClick2(e) {
var evt = e ? e : window.event;
var clickX = 0, clickY = 0;
if ((evt.clientX || evt.clientY) && document.body
&& document.body.scrollLeft != null) {
clickX = evt.clientX + document.body.scrollLeft;
clickY = evt.clientY + document.body.scrollTop;
}
if ((evt.clientX || evt.clientY) && document.compatMode == 'CSS1Compat'
&& document.documentElement
&& document.documentElement.scrollLeft != null) {
clickX = evt.clientX + document.documentElement.scrollLeft;
clickY = evt.clientY + document.documentElement.scrollTop;
}
if (evt.pageX || evt.pageY) {
clickX = evt.pageX;
clickY = evt.pageY;
}
alert(evt.type.toUpperCase() + '2 mouse event:' + '\n pageX = '
+ clickX + '\n pageY = ' + clickY + '\n clientX = '
+ evt.clientX + '\n clientY = ' + evt.clientY + '\n screenX = '
+ evt.screenX + '\n screenY = ' + evt.screenY)
}
</SCRIPT>
</HEAD>
<body onload="initialise()">
<div id="mydiv">CLICK ME!</div>
<div id="mydiv" onclick="doMouseClick2(event)">ALSO CLICK ME!</div>
</body>
</HTML>
我在使用相同版本的 Chrome 的 MacBook Pro 上尝试了相同的操作,并且一切正常(即 event.getX() 和 getY() 返回整数)。我不是 Mac、web 或 javascript 专家——而且是 gwt 的新手。我尝试使用 Chrome 的开发人员工具来追踪十进制数字的来源,但无法追踪。有人可以建议一种解决/跟踪此问题的方法吗?它是 Mac OS 的东西,浏览器扩展(测试人员说他没有安装任何东西),还是别的什么?
当我们尝试使用 restygwt 调用服务器时,问题就出现了,鼠标坐标我们希望是整数,但作为浮点数传递,然后 resteasy 在 parseInt 尝试解析 url 时抛出异常。
编辑:
好的,所以我只是尝试增加 Chrome Windows 上的缩放,并且能够重现该问题,所以这似乎正是如此 - 正如 Paul 所提到的。在这种情况下怎么办?event.getX() 应该返回一个 int - 但显然不是在缩放事物时。这是一个已知的问题?我应该发布另一个问题。我会看看我能找到什么。
到目前为止,只是这样: https ://code.google.com/p/google-web-toolkit/issues/detail?id=6130