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

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

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

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

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <overlay id="resizable-extensions-overlay"  
  3.          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">  
  4.   
  5.   <script type="application/x-javascript"><![CDATA[ 
  6.     // Make prefwindow resizable. 
  7.     // overwrite cmd_options, see chrome/tookit/content/mozapps/extensions/extensions.js 
  8.     window.addEventListener("load", function(){ 
  9.       eval("gExtensionsViewController.commands.cmd_options ="+gExtensionsViewController.commands.cmd_options.toString().replace( 
  10.         'openDialog(optionsURL, "", features);', 
  11.         'openDialog(optionsURL, "", features + ",resizable=yes"'; 
  12.       )); 
  13.       return; 
  14.     }, false); 
  15.   ]]></script>  
  16. </overlay>  

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