解決 Safari 5.1 強迫進行自動重新載入網頁的困擾
2011/12/15 1:48 pm Intersect

或許你已經發現,從 Safari 5.1 開始,就提供一個看似不錯但或許實際上十分惱人的功能,那就是對於一段時間沒有動作的視窗或標籤頁,倘若重新被使用者帶到前景閱讀,會強迫進行自動重新載入網頁,也就是所謂的 auto-refresh 的動作。這個動作乃是來自 Safari 所使用的瀏覽器底層引擎 WebKit2 所帶來的「多程序視窗」(multi-process windows)功能,目前沒有辦法從什麼設定的地方將之關閉。

什麼是「多程序視窗」呢?在 WebKit2 的新架構中, Safari 主要是由「使用者界面」與「Web」兩個獨立程序所組成,前者負責處理 Safari 本身的內容如地址欄、工具欄、書籤等相關的程序與動作,後者則是處理網頁的讀取與顯示等動作程序。這樣做的主要目的是提供避免程式當掉的保護。所以當 Safari 中某一網頁內容造成程式本身瀕臨當掉時, WebKit2 新架構得以避免這樣的情況,但必須把所有正在開啓的視窗或標籤頁重新載入,也會讓正在下載檔案的程序暫停。

此時萬一使用者正在網頁中就內容所顯示的表單輸入資料,也會因此而宣告中斷,並且正在輸入的文字內容都宣告消失無蹤;下載中的檔案或許可以續傳,或許也需要從頭下載,讓使用者為之氣結。雖然這樣的程序能防止整個 Safari 當掉,但相關的處理方式卻令人沮喪;甚至於讓人懷疑是否有必要這麼做,並對新架構所宣稱的好處感到疑慮。或許蘋果會在 Safari 下一個版本對這個問題加以處理,但目前的惱人情況也得要自救一下,該怎麼做呢?網路上有教學,筆者在此轉介:

1. 關上 Safari ,打開「應用程式」檔案夾中「工具程式」檔案夾裡頭的「終端機」也就是 Terminal 。

2. 輸入「defaults write com.apple.Safari IncludeInternalDebugMenu 1」指令,讓 Safari 提供軟體開發者使用的 Debug 選單出現在選單欄上。如下圖所示:



3. 重新開啟 Safari ,此時應該就可在選單欄上看到 Debug 選單了。在其下方找到「Use Multi-process Windows”」項目,並將之取消勾選,也就是不使用多程序視窗之意。



4. 此時請新開一個視窗,看看在視窗名稱欄上是否多了一個 [SP] 記號。 SP 的意思就是 Single-process 也就是單程序,換言之,就代表因為多程序視窗所帶來的強迫進行自動重新載入網頁動作就此不再出現。



但改成單程序後,有什麼缺點?若干 Safari 外掛模組就無法在單程序狀況下執行,如一些廣告阻擋模組、 ClickToFlash 與 1Password 等。有興趣的朋友,可考慮是否值得這麼做。