2013-12-17 96 views
1

我不得不使用爲IE6編寫的Web應用程序(十多年前,我猜測),只適用於IE(新版本的怪癖模式)。我已經能夠修復一些更令人震驚的JavaScript與Safari擴展注入腳本來分離事件處理程序並將其替換爲符合DOM的版本。擴展腳本可以在頁面腳本之前觸發嗎?

我現在把我的注意力轉向煩惱而不是徹頭徹尾的破碎。大量使用警報來通知用戶進度是痛苦的。我認爲這將是一個相當不錯的補充,我的擴展覆蓋window.alert函數與一些CSS彈出,但我遇到的挑戰是頁面發送後,http的帖子,他們所做的第一件事是顯示成功(或失敗)警報。

根據this Apple documentation「啓動腳本在創建文檔時但在網頁被分析之前執行」。我原以爲如果頁面沒有被解析,頁面的腳本標籤中的腳本就不會運行,但這不是我所看到的行爲。相反,看起來在發佈響應返回的頁面中的任何腳本在我的啓動腳本甚至加載之前都會執行。

爲了測試這個,我有一個非常簡單的啓動腳本,它記錄到控制檯的location.href並嘗試用console.log替換window.alert。

注入的啓動腳本:

console.log(window.location.href + "loaded killAlert.js") ; 
window.alert=function(str) { console.log(str) ; } 

測試網頁:

<html><head></head> 
<body> 
    <script>alert("this is an alert message") ;</script> 
    nothing to see here... move along. 
</body> 
</html> 

什麼情況是,加載嵌入腳本的測試頁面的時候,任何事情之前被寫入警報執行的console.log。

我的問題 -

  • 什麼時候開始的腳本實際上被調用?
  • 有什麼辦法可以讓他們執行之前頁面上的任何腳本?

雖然這看起來應該是相當直接的,但到目前爲止,我還沒有能夠通過閱讀文檔,搜索或試驗找到解決問題的方法。我希望有人解決了類似的問題。

回答

0
<head> 
    <script> 
    (function() { 
     console.log(window.location.href + "loaded killAlert.js") ; 
     window.alert=function(str) { console.log(str) ; } 
    })(); 
    </script> 
</head> 

嘗試匿名調用它,它會在創建後立即執行腳本。希望能幫助到你。

+0

感謝您的建議@Holybreath。我已經嘗試過 - 但得出的結論是沒有優勢。該腳本正在被調用,但在頁面腳本執行完畢後(正如我在OP中指出的,似乎與Apple的文檔相反)。 – Xcapee

相關問題