2012-11-26 21 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內容位於應用程序沙箱之外,則可能是問題所在。