Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在没有插件的情况下将文本复制到Vaadin中的剪贴板_Javascript_Copy_Vaadin_Clipboard - Fatal编程技术网

Javascript 如何在没有插件的情况下将文本复制到Vaadin中的剪贴板

Javascript 如何在没有插件的情况下将文本复制到Vaadin中的剪贴板,javascript,copy,vaadin,clipboard,Javascript,Copy,Vaadin,Clipboard,我花了很长时间,试图让所有目录组件都工作。他们做了一些本来可以非常简单的事情,让事情变得复杂和困难 我最终努力将javascript函数复制到我的项目中,它使用了一种简单的方法。与所有其他方法一样,该方法需要由其他组件启动。但是你可以用任何你想要的方式去做 我只留下密码。希望其他人能找到这个,用的时间比我少 void copyText(String text){ Page page = UI.getCurrent().getPage(); page.executeJavaScri

我花了很长时间,试图让所有目录组件都工作。他们做了一些本来可以非常简单的事情,让事情变得复杂和困难

我最终努力将javascript函数复制到我的项目中,它使用了一种简单的方法。与所有其他方法一样,该方法需要由其他组件启动。但是你可以用任何你想要的方式去做

我只留下密码。希望其他人能找到这个,用的时间比我少

void copyText(String text){
    Page page = UI.getCurrent().getPage();
    page.executeJavaScript(
                    "var el = document.createElement('textarea');" +
                    "el.value = $0;" +
                    "el.setAttribute('readonly', '');" +
                    "el.style = {" +
                    "   position: 'absolute'," +
                    "   left: '-9999px'" +
                    "};" +
                    "document.body.appendChild(el);" +
                    "el.select();" +
                    "document.execCommand('copy');" +
                    "document.body.removeChild(el);",
            text);
}
只是为了进一步解释代码。我们需要初始化页面,然后执行普通javascript代码。在这段代码中,我将字符串文本作为参数传递,并将其作为“$0”在代码中使用

代码创建了一个textarea,目录中的大多数插件也会这样做。然后设置文本字符串,通过一些样式将其从ui中隐藏。然后textarea被添加到我们的文件中,因为您只能复制一个可见的值。然后选择、复制文本,最后删除文本区域。又快又干净

还可以添加以下行:

el.setSelectionRange(0, 99999);

将其添加到el.select()之后;线路。根据W3的说法,使用这条线路的手机应该能更好地工作,但我还没有测试过它。

您测试过Safari中是否可以使用它吗?我没有。我读到javascript代码应该适用于IE8之上的任何东西。我明天会测试一下,然后再做。根据这一点,它应该和他的代码逻辑一样工作,上面是一样的。你在目录中制作了一个插件,对吗?是否有我不知道的复制到剪贴板的“最佳实践”?我写这篇文章只是希望它能帮助别人,而不是误导别人(如果有的话)。如果你有什么要分享的,请分享。如果我没记错的话,之前有一些特定于浏览器的差异,但我已经有一段时间没看了。我只记得让它在所有平台上正常工作并不是一件小事。这就是我问起Safari的原因;我没有Mac电脑,所以我不能自己测试。使用不同的移动设备进行测试也是一个好主意。
el.setSelectionRange(0, 99999);