0

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

4

0 回答 0