在Adobe AIR中创建桌面应用程序的美妙之处在于我仍然可以使用我的Web开发技能来实现这一目标。
出于某种原因,我在检测剪贴板中的内容并将其显示在我的应用程序中时遇到了一个小问题。
这是我的代码:
<body>
<div id="infoDiv"></div>
<script>
function everysecond() {
setInterval("checkClipBoard()",1000);
}
function checkClipBoard(){
if(air.Clipboard.generalClipboard.hasFormat("text/plain")){
var text = air.Clipboard.generalClipboard.getData("text/plain");
}else{
var text = "nothing in clipboard";
}
$("#infoDiv").html(text);
}
everysecond();
</script>
</body>
我的应用程序是否处于Focus状态,它似乎无法检测到我复制到剪贴板的任何内容(Ctrl + C)
有人看到我的问题吗?
答案 0 :(得分:0)
剪贴板轮询是一个可怕的黑客攻击。您将与(合法地)打开剪贴板的其他应用程序发生冲突。因此,当您的应用运行时,您将在用户尝试复制/粘贴数据的其他应用中导致失败(并可能崩溃)。你见过“无法打开剪贴板”的错误吗?这是导致他们的事情。我不知道在Air中你可以使用哪些功能,但是如果没有剪贴板通知功能(例如WM_DrawClipboard消息),那么你应该重新考虑一下你在这里尝试做什么的需要
这说得最好:
“程序不应将数据传输到剪贴板中 没有来自用户的明确指示。“ - Charles Petzold, 编程Windows 3.1,Microsoft Press,1992
答案 1 :(得分:0)
来自docs:
Only code running in the application sandbox can access the system clipboard
directly. In non-application HTML content, you can only access the clipboard
through the clipboardData property of an event object dispatched by one of
the HTML copy or paste events.
如果您的HTML内容位于应用程序沙箱之外,则可能是问题所在。