沒有 LiveReload 也過得很好

「雙螢幕 + FireGestures 搖擺手勢(按住滑鼠右鍵再按左鍵)重新載入網頁」 —— 至少比按 F5 快多了。

目前環境

Windows 7 的 Firefox 21 beta + LiveReload Firefox extension,
Ubuntu VM 的 Rails + guard-livereload

我的 LiveReload 大概已經一兩年沒辦法用了,I Don't Know Why,最近被問到才重啟調查,發現在瀏覽器直接測試 WebSocket(可以用 WebSocket.org | Echo Test 測)是可以和 VM 裡的 LiveReload server 來往的,那八成是瀏覽器的擴充套件出狀況。

惱人的 LiveReload Firefox 擴充套件

LiveReload 官網提供的 2.0.8 版 xpi 因為還沒包含 Pull Request #8,所以應該是不堪用的,此外還有按鈕無法移除、連線錯誤沒有警告(有時甚至毫無反應)等煩人問題。

另一關鍵是沒有選項可以調整連線的 hostport,預設是 127.0.0.1 和 35729,我 VM 裡的 server 就不是用這兩個,當然連不上。

註:LiveReload 現在的設計是 server 在頁面插入 livereload.js,讓 client 從中取得 host 和 port。 所以也許是我的 guard-livereload 版本太舊(0.3.1),或者頁面需要另做修改。

最後對策是改 xpi 內容,讓它讀取 Firefox 自訂選項 extensions.livereload.fc.hostportfc 只是隨便定的名字),具體是在 global.js 的 beforeEnablingFirst 加入:

// Use custom preferences
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
  .getService(Components.interfaces.nsIPrefService);
prefs = prefs.getBranch("extensions.livereload.fc.");
if (prefs.getCharPref('host')) {
  this.host = prefs.getCharPref('host');
}
if (prefs.getCharPref('port')) {
  this.port = prefs.getCharPref('port');
}