2010-11-18 127 views
4

是可以攔截瀏覽器消息,如:攔截瀏覽器慢腳本消息

火狐:

此頁上的腳本可能忙,或者 它可能已停止響應。您 現在可以停止腳本,在調試器中打開 腳本,或者讓 腳本繼續。

I.E.

此頁上的腳本導致您的網頁瀏覽器運行緩慢。如果 繼續運行,您的計算機可能會 無響應。

由於頁面有很多javascript/jquery活動,因此發生這些消息。

我認爲這些消息首先出現的事實表明存在更廣泛的問題,但是有沒有一種方法可以在客戶端插入此消息/情況,以便顯示更加用戶友好的消息?

回答

6

沒有沒有辦法做到這一點,想象一個惡意用戶編寫一個腳本會減慢瀏覽器的速度,直到完全無法使用,現在「慢腳本」警告可能會出現,但如果他能攔截它並防止它被顯示?

你需要找到一個潛在問題的解決方案,也就是說,如果你正在做大量的計算(我想你會這樣做),你需要將它們拆分成塊,把它們放入一個隊列中,並以異步方式(如果可能)或按順序處理它們,但在兩者之間有一個小超時。

在僞代碼,可能是這樣的:

var queue = []; // put your functions or the data in here 
function() processQueue{ 
    if (queue.length > 0) { 
     var item = queue.shift() // pop of the first item of the queue 
     item(); // call the function, or in case of data pass it to th processing function 
     setTimeout(processQueue, 100); // wait 100 ms before processing the next chunck 
    } 
} 

setTimeout(processQueue, 0); 
+0

感謝代碼Ivo – Dan 2010-11-18 10:40:50

1

不,沒有辦法攔截這些消息,它們在引擎中處於較低級別以保護用戶。相反,看看需要花費多長時間,儘可能優化......可能會將你的工作分解成在處理上存在差距的區塊,這樣你就不會觸發這些信息。

+0

感謝尼克,是有道理的。你確切知道這個消息出現的原因嗎?是否純粹只是腳本花費太長時間來執行,而不是與內存相關? – Dan 2010-11-18 10:39:26

+0

@Dan - 有限制,它們因瀏覽器而異,我認爲在IE中它是XXX操作,還有內存限制......只是不確定數字,它們可能會根據瀏覽器版本的不同而不同。 – 2010-11-18 10:41:32