2011-03-30 62 views
0

我們有一個asp應用程序,人們可以在其上進行測試。在測試頁面上,有一個顯示剩餘時間的asp控件。當您右鍵單擊該控件時,提供時間的JavaScript會中斷。爲了解決這個問題,我們禁用右鍵單擊。但現在我注意到,如果您選擇了一些文本並單擊IE8加速器藍色按鈕,JavaScript也會中斷。禁用左鍵單擊當然不能選擇。IE8加速器停止javascript計時器

我在IE中發現禁用加速器的選項,所以對於我們內部來說,問題就解決了。但我們希望找到另一種解決方案,因爲我們無法要求每一位用戶都在他們的所有計算機上禁用該選項。

我們更喜歡將解決方案集成到代碼中的解決方案,以便通過升級我們的程序來解決問題。所以,如果有人知道是否和如何可以禁用/旁路/ ...即加速器...

在此先感謝。

編輯

既具有客戶機上的服務器上的定時器和一個工作提出了新的問題:在那裏你會畫在服務器和客戶端上的時間差之間的界線。無論如何,這個問題到目前爲止還沒有發生,所以我想人們都忙於專注於測試,然後找到一種方法來打破我們的系統。

編輯2

我嘗試使用方法與焦點的時候,但沒有運氣。這是我測試的HTML:

<html xmlns="http://www.w3.org/1999/xhtml" > 
<SCRIPT LANGUAGE="JavaScript"> 
    function showObj() { 
     //alert('?'); 
     return false; 
    } 
</SCRIPT> 
<head> 
    <title>Untitled Page</title> 
</head> 

<body onSelectStart="showObj()"> 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
     Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 
     Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. 
     Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 
    </p> 
</body> 

+0

1-仍然可以完成,只是相同。那麼妥協可能會有所幫助。同時使用兩次,如果它們靠近(對於某些關閉值),則可以使用其中一個或將它們平均。如果他們離開了,你知道一些事情正在發生,並使用服務器端。 – 2011-04-01 12:07:55

回答

1

解決方法是禁用選擇文本的功能。這聽起來不像複製+粘貼在你工作的環境中是必要的。

在大多數瀏覽器中,這是通過使用CSS:user-select: none;(帶有適用的瀏覽器前綴)完成的。但是,這個CSS在IE中是不可用的(雖然我不確定IE9是什麼,所以它可能值得包括),並且因爲你具體詢問IE,所以你需要一個替代解決方案。幸運的是,IE確實提供了:

<div unselectable="on">...</div> 

不幸的是,該屬性沒有被繼承,所以你需要在每個包含文本的元素上指定它。 (或者您可以編寫一個Javascript或JQuery函數,在頁面加載後將其應用於每個元素)

最後,也可能是最佳選項:還有一個onselectstart方法可以綁定到一個元素。類似這樣會禁用文本選擇:onselectstart = function(){ return false; }。更好的是,應該通過兒童標籤繼承,所以你可以把它放在你的<body>標籤上並加以完成。

+0

...
」是否將屬性傳遞給兒童? – Terry 2011-04-07 14:00:44

+0

@djerry:不,如我所說,我相信它不是遺傳的。 – Spudley 2011-04-07 14:25:40

+0

@djerry:我建議使用'onselectstart'來代替。 – Spudley 2011-04-07 14:27:07

3

如果您使用的是完全基於客戶端的計時器來實際驗證人在一定時間內提交的東西,作弊永遠是可能的。無論您做什麼,都可以在頁面頂部放置一個腳本,完全殺死定時器。

似乎你應該使用服務器時鐘。如果某些客戶做了某件事情會導致屏幕計時器崩潰,那麼對此您無能爲力。但只要您在提交答案時驗證服務器上的時間,它總是準確的。

+0

測試是在受控環境下進行的,因此不能使用外部腳本,也不能打開任何其他窗口,因此只有此問題可能導致「作弊」 – Terry 2011-03-30 10:45:14

+0

您能確定在每種環境中,最終用戶都無法做到如瀏覽器上的訪問腳本調試?如果客戶有託管瀏覽器配置(例如,它總是IE,總是一個版本,沒有插件,沒有網頁瀏覽等),那麼我同意 - 但在這種情況下,您的客戶應該能夠如果沒有,那麼用戶總是可以做些事情,我意識到這個問題不需要特別的知識,因此更有可能,但是,爲什麼不在服務器上驗證時間呢?而不是客戶端? – 2011-03-30 10:56:15

+0

這個項目只需要維護和小的更新,因爲這個項目已經有好幾年了,我們正在設置一個新的p新項目將取代我們目前的項目。所以暫時,我們只是解決問題。 此外,我可以保證除測試本身之外,測試計算機上沒有其他任何東西可以完成,這就是計算機配置要做的事情。 – Terry 2011-03-30 11:00:00

2

同驗證,這是來自客戶端從未信任數據。你應該做的是在服務器端記錄測試開始的時間,然後記錄測試提交的時間。用戶方面的時鐘應該只是一個很好的,但不是依靠,因爲沒有辦法保證它是準確的(上面發佈了幾十個原因)。

接近故障的方式是用戶在服務器端的東西,並不以任何方式知道,與最終用戶交互或可以修改。

+0

請參閱我的編輯問題作爲對您和其他服務器客戶端的評論 – Terry 2011-04-01 06:34:16