0

在 Adob​​e 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>

无论我的应用程序是否处于焦点,它似乎都没有检测到我复制到剪贴板的任何内容 (Ctrl + C)

有人看到我的问题吗?

4

2 回答 2

0

剪贴板轮询是一个可怕的黑客。您将与(合法)打开剪贴板的其他应用程序发生冲突。因此,当您的应用程序运行时,您将在用户尝试复制/粘贴数据的其他应用程序中导致失败(并可能崩溃)。你见过“无法打开剪贴板”的错误吗?正是这样的事情导致了他们。我不知道您在 Air 中可以使用哪些功能,但是如果没有剪贴板通知功能(例如 WM_DrawClipboard 消息),那么您可能应该重新考虑您在这里尝试做的事情的必要性.

这说得最好:

“如果没有用户的明确指示,程序不应将数据从剪贴板中传输出来。” — Charles Petzold,Windows 3.1 编程,微软出版社,1992

于 2012-11-28T18:23:48.683 回答
0

文档

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 内容在应用程序沙箱之外,这可能是问题所在。

于 2013-09-08T06:34:42.440 回答