2012-11-26 22 views
0

在Adobe AIR中创建桌面应用程序的优点是,我仍然可以使用我的Web开发技能来实现这一点。Adob​​e AIR剪贴板检测

出于某种原因,我遇到了轻微的问题,检测剪贴板中的内容,并将其显示在我的应用程序中。

这里是我的代码:

<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)

任何人看到我的问题?

+0

不要将字符串传递给'setTimeout' – SLaks

回答

0

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

这个最佳说它:

“程序应该没有来自用户的明确指令,数据不能传输到我们的出剪贴板 的。” - 查尔斯Petzold的, 编程Windows 3.1,微软出版社,1992年

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