移动Safari - JavaScript点击事件中断复制和粘贴

时间:2012-01-31 23:15:25

标签: javascript html css mobile mobile-safari

当您将Click事件绑定到Mobile Safari中的任何元素时,复制并禁止粘贴,是否有人知道解决方法!?

<span onclick="void(0);">This text cannot be cut or copied and a -webkit-tap-highlight-color style is automatically applied.</span>

这对我来说似乎是一个巨大的错误,特别是如果你从父元素(如身体)委派事件......

有关此问题的演示,请尝试在此演示中使用移动版Safari(iPhone或iPad)复制文字:http://jsbin.com/ikileb/1/

注意:如果您从主体委托事件,但是如果它是从DOM中的任何其他元素委派的,则应用-webkit-tap-highlight-color并在整个元素中阻止复制和粘贴,这似乎没问题。

2 个答案:

答案 0 :(得分:0)

不,唯一的方法是改变你的用户体验行为,比如添加一个可点击的按钮。你可以查看G +移动版。

答案 1 :(得分:0)

我有同样的问题,这个解决方案需要一些jQuery。

我提供的示例是使用传统键盘/鼠标的更复杂的示例。但对于触摸设备,只需按照左键单击部分即可。

  1. 左键单击将在同一窗口中显示一个链接
  2. 右键单击将在新窗口中显示一个链接
  3. 左键单击拖动以选择允许复制和粘贴静止(在我的方案中,桌面用户将使用他们的复制/粘贴击键,而不是右键单击)
  4. 不是100%确定Safari的细节,但这通常适用于所有现代浏览器。

    以下是我要访问的链接表:

    <table>
    <tr class="row"><td>http://google.com</td></tr>
    <tr class="row"><td>http://teslamotors.com</td></tr>
    <tr class="row"><td>http://solarcity.com</td></tr>
    </table>
    

    这是使用当前版本的jQuery来处理mousedownmouseup绑定的脚本:

    <script>
    $(document).ready(function() {
        var lastMouseDownEvent = null;
    
        // capture your last "mousedown" event and store it
        $(".row").mousedown(function(event) {
            console.log(event); // lets see the data in your Developer Mode log
            lastMouseDownEvent = event;
        });
    
        // catch the "mouseup" event and compare the distance from "mousedown"
        $(".row").mousedown(function(event) {
            console.log(event);
    
            var href = $(this).find("td").html();
            switch(event.which) {
                case 1: // left click
                    // only process left click if mousedown and mouseup occur at the same location on screen.
                    // NOTE: for my mom's shaky hand I added the 5 pixel allowance.
                    if (Math.abs(event.clientX-lastMouseDownEvent.clientX) < 5 &&
                        Math.abs(event.clientY-lastMouseDownEvent.clientY < 5))
                        window.location.href = href;
                    break;
                case 2: // right click
                    window.open(href);
                    break;
            }
            lastMouseDownEvent = null;
        });
    
    
    });
    </script>