先說明一下,如果你不想寫/改套件,這篇文章很慚愧地幫不上什麼忙。

問題是這樣:Firefox「附加元件管理員」開啟的選項視窗(prefwindow)是不能縮放的;所以視窗過大、過小都會變成痛苦。以往要突破此限制,可能會另外提供開視窗的方法,例如把選項放在工具列以便自行操作開視窗的行為;但不是每個套件都值得為了這個,特別新增選單項目佔空間吧。

正好前幾天 Tab Mix Plus 放出新版 0.3.7,發現他的選項視窗很特別,開了以後還能把套件管理員關掉(本來是暫時關不掉),於是看了原始碼,在 chrome/content/tabmixplus/links/setup.js 第 29 行找到魔法的痕跡……細節就省略,因為跟下面改的東西原理相同(改的極少,恐怕說抄比較貼切。)

這是一個 XULoverlay 檔案,讓附加元件管理員開出可縮放的視窗:

<?xml version="1.0" encoding="UTF-8"?>
<overlay id="resizable-extensions-overlay"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <script type="application/x-javascript"><![CDATA[
    // Make prefwindow resizable.
    // overwrite cmd_options, see chrome/tookit/content/mozapps/extensions/extensions.js
    window.addEventListener("load", function(){
      eval("gExtensionsViewController.commands.cmd_options ="+gExtensionsViewController.commands.cmd_options.toString().replace(
        'openDialog(optionsURL, "", features);',
        'openDialog(optionsURL, "", features + ",resizable=yes"';
      ));
      return;
    }, false);
  ]]></script>
</overlay>

看來是鑽到某個不為人知的物件,把它的方法轉成字串修改後再 eval ……感覺很不可靠,但是寫法好簡單,乾脆急病亂投醫吧。