三太子(Nalakuvara)計畫:技術細節

介入時機

Opera 初次安裝完成後,檔案都會放在 %ProgramFiles%\Opera,直到第一次執行時,才把部分設定檔複製到 %APPDATA%\Opera 以及 %USERPROFILE%\Local Settings\Application Data\Opera 等處。因此最容易動手腳的時間,就是整個系統上第一次安裝 Opera 後、尚未執行前。

安裝指令

由於 Opera 官方的安裝檔預設會在安裝完成後就啟動 Opera,為了避免使用者誤按,所以要用這樣的指令來「安靜安裝」:

msiexec /i Opera_1060_int_Setup.msi /qn CREATE_DESKTOP_ICON_REG=1 CREATE_DESKTOP_ICON_REG_USR=1 CREATE_QUICKLAUNCH_ICON_REG=1 CREATE_QUICKLAUNCH_ICON_REG_USR=1 CREATE_STARTMENU_ICONS=1 CREATE_STARTMENU_ICONS_REG_USR=1 ISCHECKFORPRODUCTUPDATES=0 ALLUSERS=1 LAUNCH_OPERA_ON_FINISH=0 SET_DEFAULT_BROWSER=1

在這組參數當中,會指定:

  • 要建立桌面圖示(CREATE_DESKTOP_ICON_REG=1 CREATE_DESKTOP_ICON_REG_USR=1
  • 要建立快速啟動列圖示(CREATE_QUICKLAUNCH_ICON_REG=1 CREATE_QUICKLAUNCH_ICON_REG_USR=1
  • 要建立開始選單圖示(CREATE_STARTMENU_ICONS=1 CREATE_STARTMENU_ICONS_REG_USR=1
  • 安裝前不檢查是否有更新版(ISCHECKFORPRODUCTUPDATES=0
  • 為所有的使用者安裝(ALLUSERS=1
  • 安裝後不要自動啟動 Opera(LAUNCH_OPERA_ON_FINISH=0
  • 將 Opera 設為預設瀏覽器(SET_DEFAULT_BROWSER=1

如果有別的考量,而要採取不同的安裝選項,就可以修改上述各參數。如果需要指定安裝路徑,則可以再加上這樣的參數:

INSTALLDIR="路徑名稱"

也就是使用像這樣的指令:

msiexec /i Opera_1060_int_Setup.msi /qn CREATE_DESKTOP_ICON_REG=1 CREATE_DESKTOP_ICON_REG_USR=1 CREATE_QUICKLAUNCH_ICON_REG=1 CREATE_QUICKLAUNCH_ICON_REG_USR=1 CREATE_STARTMENU_ICONS=1 CREATE_STARTMENU_ICONS_REG_USR=1 ISCHECKFORPRODUCTUPDATES=0 ALLUSERS=1 LAUNCH_OPERA_ON_FINISH=0 SET_DEFAULT_BROWSER=1 INSTALLDIR="路徑名稱"

檔案位置

請注意:為了說明方便,以下的解說都是以 Opera 的預設安裝路徑為主。如果使用了自定的安裝路徑,則這些檔案的位置也都會有所不同。

Opera 當中,有一些設定檔可以放在 %ProgramFiles%\Opera\custom\defaults 內,如此不會真的蓋掉原本的預設設定檔,但是程式的預設行為就會以這些「自定的預設值」為優先。另外有一些設定檔可以放在 %ProgramFiles%\Opera\locale 內的各語系目錄當中,則只有切換成某個語系的時候,那些設定才會生效。因此一些跟「介面語言」有關的設定,最好都採用這樣的方式來做。不過有一些設定檔就非得要蓋掉原本的預設檔案才有用,這就沒有辦法了。

按照這樣的邏輯,最後完整安裝套件會把修改過的檔案複製到下列各處:

  • %ProgramFiles%\Opera\custom\defaults\fastforward.ini
  • %ProgramFiles%\Opera\custom\defaults\feedreaders.ini
  • %ProgramFiles%\Opera\custom\defaults\operaprefs.ini
  • %ProgramFiles%\Opera\defaults\webmailproviders.ini
  • %ProgramFiles%\Opera\locale\zh-tw\bookmarks.adr
  • %ProgramFiles%\Opera\locale\zh-tw\search.ini
  • %ProgramFiles%\Opera\locale\zh-tw\zh-tw.lng
  • %ProgramFiles%\Opera\program\plugins\npie_opera.dll
  • %ProgramFiles%\Opera\styles\user\000_Antiflash.css
  • %ProgramFiles%\Opera\styles\user\000_bantiad.css
  • %ProgramFiles%\Opera\ui\standard_menu.ini
  • %ProgramFiles%\Opera\ui\standard_toolbar.ini
  • %APPDATA%\Opera\Opera\override.ini

修改使用者設定

補綴套件除了也會複製上述檔案外,還會再複製下列檔案,蓋掉使用者原有的設定:

  • %APPDATA%\Opera\Opera\styles\000_Antiflash.css
  • %APPDATA%\Opera\Opera\styles\000_bantiad.css
  • %USERPROFILE%\Local Settings\Application Data\Opera\Opera\custom\defaults\fastforward.ini
  • %USERPROFILE%\Local Settings\Application Data\Opera\Opera\custom\defaults\feedreaders.ini
  • %USERPROFILE%\Local Settings\Application Data\Opera\Opera\custom\defaults\operaprefs.ini

並且會修改下列檔案的部分內容:

  • %APPDATA%\Opera\Opera\operaprefs.ini

使用者設定一覽

使用者設定(修改過的檔案
作用 功能設定連結 預設值 三太子設定值
滑鼠手勢(註:10.50 起預設為 1) opera:config#UserPrefs|EnableGesture 0 1
超級拖放 opera:config#UserPrefs|EnableDrag 247 255
在分頁頁籤雙擊就關閉頁籤 opera:config#UserPrefs|DoubleclicktoCloseTab 0 1
不要重新使用目前的頁籤 opera:config#UserPrefs|NewWindow 0 1
在背景開新分頁(註:10.50 起沒有這個設定項) opera:config#UserPrefs|OpenNewWindowinBackground 0 1
在背景分頁開啟拖曳的鏈結(註:10.60 起新增) opera:config#UserPrefs|OpenDraggedLinkInBackground 0 1
在視窗邊緣顯示面板切換區域 opera:config#UserPrefs|Showpaneltoggle 0 1
設定瀏覽列位置在上 opera:config#UserPrefs|NavigationBarAlignment 0 2
瀏覽列只在需要時出現 oopera:config#UserPrefs|NavigationBarAutoAlignment 0 1
啟用使用者 JavaScript opera:config#UserPrefs|UserJavaScript 0 1
使用者 JavaScript 目錄 opera:config#UserPrefs|UserJavaScriptFile C:\Program Files\Opera\UserJS
總是載入使用者 JavaScript opera:config#UserPrefs|AlwaysLoadUserJavaScript 0 1
瀏覽器對話方塊字型設為新細明體(Opera 10.60 起不再需要這項設定) opera:config#Fonts|Dialog 15,4,0,0,0,0,SimSun 12,4,0,0,0,0,新細明體
瀏覽器選單字型設為新細明體(Opera 10.60 起不再需要這項設定) opera:config#Fonts|Menu 15,4,0,0,0,0,SimSun 12,4,0,0,0,0,新細明體
瀏覽器面板字型設為新細明體(Opera 10.60 起不再需要這項設定) opera:config#Fonts|Panel 15,4,0,0,0,0,SimSun 12,4,0,0,0,0,新細明體
瀏覽器工具列字型設為新細明體(Opera 10.60 起不再需要這項設定) opera:config#Fonts|Toolbar 15,4,0,0,0,0,SimSun 12,4,0,0,0,0,新細明體
瀏覽器工具提示字型設為新細明體(Opera 10.60 起不再需要這項設定) opera:config#Fonts|Tooltip 15,4,0,0,0,0,SimSun 12,4,0,0,0,0,新細明體
瀏覽網頁時優先使用繁體中文 opera:config#Network|HTTPAcceptLanguage zh-TW,zh;q=0.9,en;q=0.8 zh-tw,en;q=0.9
在網址列輸入無效網址時不要查找區域網路主機名稱 opera:config#Network|CheckLocalHostName 1 0
在網址列輸入無效網址時不要自動補上前綴、後綴 opera:config#Network|EnableHostNameExpansion 1 0
在網址列輸入無效網址時就用搜尋引擎查詢 opera:config#Network|EnableHostNameWebLookup 0 1
在網址列輸入無效網址時要用搜尋引擎指令 opera:config#Network|HostNameWebLookupAddress http://www.google.com/search?q=%s&sourceid=opera&num=%i&ie=utf-8&oe=utf-8

使用者 CSS 一覽

使用者 CSS
作用 檔案 說明
搭配 Flash Blocker 使用 000_Antiflash.css 使用者 CSS 目錄當中所有的檔案照檔名排列時,這個檔案一定要是第一個
搭配 Grafik Blocker 使用 000_bantiad.css 使用者 CSS 目錄當中所有的檔案照檔名排列時,這個檔案一定要是第二個

使用者 JavaScript 一覽

使用者 JavaScript
作用 套件名稱 主要檔案 設定檔案
阻擋廣告 AdBlock Plus adblock.js
大圖自動縮小 Auotsizer 2 autosizer.js
調整 Google 各項網頁服務 CustomizeGoogle customizegoogle.js customizegoogle_prefs.js
繁簡中文互轉 同文堂 transform_v2.js
增強對 W3C Ruby Annotation 標準的支援 HTML Ruby ruby.js ruby.settings.js
自動啟用 IE Tab AutoRender in IE Tab Autorender.in.IE.js Autorender.in.IE.js
長按連結在背景分頁開啟 Open in Background with Long Press open-in-background-with-long-press.js
自動備份文字區域輸入內容 Textarea Backup textareabackup.js textareabackup.js

外掛模組一覽

外掛模組
作用 套件名稱 檔案
以 IE 引擎顯示分頁內容 ie_opera(IE Tab) npie_opera.dll

網頁郵件服務清單補增項目一覽

Opera\defaults\webmailproviders.ini(修改過的檔案
[名稱] ID= URL= ICON=
[Gmail - HTML5] 8 https://mail.google.com/mail/?extsrc=mailto&url=%s https://mail.google.com/favicon.ico
[Gmail] 9 https://mail.google.com/mail/?compose=1&view=cm&fs=1&to=%t&su=%j&body=%m&cc=%k&bcc=%l
[Hotmail] 10 http://mail.live.com/mail/EditMessageLight.aspx?n=&to=%t&cc=%k&subject=%j&body=%m&bcc=%l http://mail.live.com/favicon.ico
[Ymail - Generic] 11 http://compose.mail.yahoo.com/?To=%t&Subj=%j&Body=%m&Cc=%k&Bcc=%l http://mail.yahoo.com/favicon.ico
[Ymail - Classic Compose + New UI] 12 http://us.mg1.mail.yahoo.com/mc/compose?ymv=0&body=%m&Subj=%j&to=%t&cc=%k&bcc=%l
[Ymail - New UI + Blocking Workaround] 13 http://us.mg1.mail.yahoo.com/dc/launch?sysreq=ignore&action=compose&login=1&To=%t&Subj=%j&Cc=%k&Bcc=%l&Body=%m
[Mail2000] 14 http://www.mail2000.com.tw/cgi-bin/genMail.pl?adr=%t&content=%m&subject=%j http://www.mail2000.com.tw/favicon.ico
[PChome Mail] 20 http://mail.pchome.com.tw/compose_content?MailTo=%t&MailSubject=%j&MailCc=%k&MailBcc=%l&text2=%m http://www.pchome.com.tw/favicon.ico
[Webmail@URL (wm1)] 21 http://wm1.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m http://www.url.com.tw/images/url.ico
[Webmail@URL (wm2)] 22 http://wm2.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m
[Webmail@URL (wm3)] 23 http://wm3.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m http://www.url.com.tw/images/url.ico
[Webmail@URL (wm4)] 24 http://wm4.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m
[Webmail@URL (wm5)] 25 http://wm5.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m http://www.url.com.tw/images/url.ico
[Webmail@URL (wm6)] 26 http://wm6.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m
[Webmail@URL (wm7)] 27 http://wm7.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m http://www.url.com.tw/images/url.ico
[Webmail@URL (wm8)] 28 http://wm8.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m
[Webmail@URL (wm9)] 29 http://wm9.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m http://www.url.com.tw/images/url.ico
[Webmail@URL (wm10)] 30 http://wm10.url.com.tw/src/compose.php?mailbox=INBOX&startMessage=1&send_to=%t&sed_to_cc=%k&send_to_bcc=%l&subject=%j&body=%m

語系檔變動一覽

Opera\locale\zh-tw\zh-tw.lng(修改過的檔案
Opera\locale\zh-cn\zh-cn.lng(修改過的檔案
Opera\locale\en\en.lng(修改過的檔案
字串代號 原始內容 三太子修改
-1539396211 字典(D) 韋氏英英字典(W)
字典 iCIBA爱词霸
Dictionary Merriam-Webster Online Dictionary
1634087069 百科全書(E) 英文維基百科(E)
百科全书 英语维基百科(E)
Encyclopedia English Wikipedia
1209820046 法文 > 英文(E) 法文 > 英文(2)
法语译英语 法语译英语(2)
French to English (2) French to English
1209820004 法文 > 德文(M) 英文 > 繁體中文(T)
法语译德语 英语译中文(C)
French to German (T) English to Traditional Chinese
1209820184 法文 > 義大利文(T) 繁體中文 > 英文(E)
法语译意大利语 中文译英语(E)
French to Italian (E) Traditional Chinese to English
1209820415 法文 > 葡萄牙文(O) Yahoo!奇摩字典
法语译葡萄牙语 台湾Yahoo!奇摩字典
French to Portuguese Yahoo! Taiwan Dictionary
1209820051 法文 > 西班牙文(A) 中文維基百科(Z)
法语译西班牙语 中文维基百科(Z)
French to Spanish Chinese Wikipedia
1206981023 德文 > 英文(N) 德文 > 英文(3)
德语译英语 德语译英语(3)
German to English (3) German to English
1206981060 德文 > 法文(R) 國家語文綜合連結檢索
德语译法语 台湾国家语文综合连结检索
German to French National Language Composite Search
1213449683 義大利文 > 英文(L) 義大利文 > 英文(4)
意大利语译英语 意大利语译英语(4)
Italian to English (4) Italian to English
1213449720 義大利文 > 法文(Y) 日文維基百科(J)
意大利语译法语 日语维基百科(J)
Italian to French Japanese Wikipedia
1221751130 葡萄牙文 > 英文(U) 葡萄牙文 > 英文(5)
葡萄牙语译英语 葡萄牙语译英语(5)
Portuguese to English (5) Portuguese to English
1208670062 西班牙文 > 英文(H) 西班牙文 > 英文(6)
西班牙语译英语 西班牙语译英语(6)
Spanish to English (6) Spanish to English
1208670099 西班牙文 > 法文(B) 偽基百科(U)
西班牙语译法语 伪基百科(U)
Spanish to French Uncyclopedia
1208490529 英文 > 繁體中文(C) 英文 > 日文(J)
英语译日语 英语译日语(J)
English to Japanese (J) English to Japanese
1213952801 繁體中文 > 英文(V) 日文 > 英文(1)
日语译英语 日语译英语(1)
Japanese to English (1) Japanese to English
999999999 查字典(D)
查字典(D)
Dictionary
999999998 查百科(E)
查百科(E)
Encyclopedia
999999997 合併且保留
合并且保留
Merge and Keep
999999996 合併
合并
Merge

搜尋定義檔變動

請直接參考修改後的 Opera\locale\zh-tw\search.iniOpera\locale\zh-cn\search.iniOpera\locale\en\search.ini

書籤定義檔變動

請直接參考修改後的 Opera\locale\zh-tw\bookmarks.adr

快速翻頁定義檔變動

請直接參考修改後的 Opera\custom\defaults\fastforward.ini

;Chinese (traditional and simplified)
前进
继续
翻页
下页
下頁
下篇
后页
后页>
往后>>
下一頁
下一页=101
下一页>
下一页>>
下一个
下一张
下一张 >
下一幅
下一幅 >
下一章
下一节
下一節
下一篇
后一页=90
下一步
翻下页
翻下頁
看下一页
下一页(快捷键→)
"[下頁]"
"[下页]"
"[继续]"
"[下一頁]"
"[下一页]"
"[翻下頁]"
"[翻下页]"
下一張 (C)
下一頁 (C)

預設選單變動

請直接參考修改後的 Opera\ui\standard_menu.ini

[Document Popup Menu]

Item, MI_IDM_Prev_PM,				= Back
Item, MI_IDM_Next_PM,				= Forward
Item, M_REWIND,				= Rewind
Item, M_FAST_FORWARD,				= Fast Forward
--------------------1
Item, MI_IDM_Reload_PM,				= Reload
Submenu, MI_IDM_AUTORELOAD_TOGGLE_PARENT, Reload Menu
--------------------2
Item, M_DOCUMENT_POPUP_MENU_BOOKMARK_PAGE		= Add to bookmarks, 1
Item, MI_IDM_POPUP_ADDRESS			= Copy document address
Item, MI_IDM_SEND_URL_EMAIL		= Send document address in mail
--------------------3
Item, MI_IDM_Print				= Print document
Item, MI_IDM_Kilde				= View document source
Item, M_DOCUMENT_POPUP_MENU_VALIDATE			= Validate frame source
Submenu, M_OPEN_WITH, Open in menu
--------------------5
Include, Internal Frame
Include, Internal Document Background
--------------------7
Submenu, MI_IDM_ENCODING_AUTOMATIC_PARENT, Encoding Menu
Item, M_BLOCK_CONTENT = Content block mode on | Content block mode off
Item, M_EDIT_SITE_PREFERENCES = Edit site preferences
--------------------8
Item, MI_IDM_FULLSCREENTOGGLE			= Enter fullscreen | Leave fullscreen
[Hotclick Popup Menu]
Item, MI_IDM_DOCCOPY			= Copy
Item, M_COPY_TO_NOTE			= Copy to note
Platform Win2000-Unix-Mac-QNX, Feature Voice, Item, M_HOTCLICK_MENU_ITEM_SPEAK = Speak selection
--------------------1
Item, MI_IDM_SELSEARCH				= Hotclick search, 200
Submenu, MI_IDM_SEARCH_DUMMY_PARENT, Internal Search With
Submenu, 999999999, Dictionary menu
Submenu, 999999998, Encyclopedia menu
--------------------2
Submenu, MI_IDM_SELTRANSLATE_EN_FR_PARENT, Translate menu
--------------------3
Item, M_HOTCLICK_POPUP_MENU_GOTO_URL				= Go to page, "%t"
Item, MI_IDM_SELMAIL			= Send text in mail
[Dictionary menu]
Item, MI_IDM_SELTRANSLATE_FR_PT			= Hotclick search, 109
Item, MI_IDM_SELDICTIONARY			= Hotclick search, 50
--------------------1
Item, MI_IDM_SELTRANSLATE_DE_FR			= Hotclick search, 112
[Encyclopedia menu]
Item, MI_IDM_SELTRANSLATE_FR_ES			= Hotclick search, 110
Item, MI_IDM_SELENCYCLOPED			= Hotclick search, 51
Item, MI_IDM_SELTRANSLATE_IT_FR			= Hotclick search, 114
--------------------1
Item, MI_IDM_SELTRANSLATE_ES_FR			= Hotclick search, 117
[Translate menu]
Item, MI_IDM_SELTRANSLATE_FR_DE	= Hotclick search, 107
Item, MI_IDM_SELTRANSLATE_FR_IT	= Hotclick search, 108
--------------------1
Item, MI_IDM_SELTRANSLATE_JA_EN	= Hotclick search, 119
Item, MI_IDM_SELTRANSLATE_FR_EN	= Hotclick search, 106
Item, MI_IDM_SELTRANSLATE_DE_EN	= Hotclick search, 111
Item, MI_IDM_SELTRANSLATE_IT_EN	= Hotclick search, 113
Item, MI_IDM_SELTRANSLATE_PT_EN	= Hotclick search, 115
Item, MI_IDM_SELTRANSLATE_ES_EN	= Hotclick search, 116
--------------------2
Item, MI_IDM_SELTRANSLATE_EN_JA	= Hotclick search, 118
Item, MI_IDM_SELTRANSLATE_EN_FR	= Hotclick search, 100
Item, MI_IDM_SELTRANSLATE_EN_DE	= Hotclick search, 101
Item, MI_IDM_SELTRANSLATE_EN_IT	= Hotclick search, 102
Item, MI_IDM_SELTRANSLATE_EN_PT	= Hotclick search, 103
Item, MI_IDM_SELTRANSLATE_EN_ES	= Hotclick search, 104
[Note Item Popup Menu]
Item, MI_IDM_SELMAIL	= Send text in mail
--------------------1
Item, MI_IDM_HLITEM_CUT				= Cut
Item, MI_IDM_HLITEM_COPY				= Copy
Item, MI_IDM_HLITEM_PASTE				= Paste
Item, 999999997				= Copy & Paste to note
Item, 999999996				= Copy & Delete & Paste to note
Item, MI_IDM_HLITEM_DELETE				= Delete
--------------------5
Item, MI_IDM_HLITEM_SELECTALL			= Select all
--------------------6
Item, M_BOOKM_PANEL_VIEW_MENU_SORT_BY_MY_ORDER	= Sort by column, -1
Item, M_BOOKM_PANEL_VIEW_MENU_SORT_BY_NAME	= Sort by column, 0
--------------------7
Item, M_NEW_NOTE	= New note
Item, SI_NEW_FOLDER_BUTTON_TEXT	= New folder
Item, M_NEW_SEPARATOR 	= New Seperator

預設工具列(按鈕)變動

請直接參考修改後的 Opera\ui\standard_toolbar.ini

[Customize Toolbar Custom.content]
Button0, "Go to page"="Go to page, "javascript:void(function (){subscriptions = [];linksList = document.getElementsByTagName('link');for ( i = 0; i < linksList.length; i++ ){ type = linksList[i].type;if ( type == 'application/rss+xml' || type == 'application/atom+xml' || type == 'application/rdf+xml' ){ subscriptions.push( { 'title':linksList[i].title, 'href':linksList[i].href } );}}if ( subscriptions.length == 0 ) return;str = '你要訂閱哪個源料?請輸入編號\n';for ( i = 0; i < subscriptions.length; i++ ){str += i + ': ' + subscriptions[i].title + '\n';}str = str.substr( 0, str.length - 1 );ret = prompt( str );if ( ret < 0 || ret >= subscriptions.length ) return;document.location.href = 'feed://' + subscriptions[ret].href;})()", 1, "以支援 feed: 協定的桌面源料閱讀軟體來訂閱源料", "RSS""
Button1, "Select user CSS file"="Select user CSS file, 0, , "Flash Blocker 啟用中", "Transfer Loading" > Deselect user CSS file, 0, , "Flash Blocker 已停用", "Transfer Failure""
Button2, "Select user CSS file"="Select user CSS file, 1, , "Grafik Blocker 啟用中", "Transfer Loading" > Deselect user CSS file, 1, , "Grafik Blocker 已停用", "Transfer Failure""
Button3, "依據結構 (nth-child) 來阻擋網頁元素"="Go to page, "javascript:navigator.ujs_adblock.block()", , "依據結構 (nth-child) 來阻擋網頁元素", "Delete""
Button4, "阻擋網頁元素"="Go to page, "javascript:navigator.ujs_adblock.block(true)", , "阻擋網頁元素", "Delete""
Button5, "還原被擋掉的網頁元素"="Go to page, "javascript:navigator.ujs_adblock.unblock()", , "還原被擋掉的網頁元素", "Mail Redirected""
Button6, "還原前一個擋掉的網頁元素"="Go to page, "javascript:navigator.ujs_adblock.unblock(true)", , "還原前一個擋掉的網頁元素", "Mail Redirected""
Button7, "手動輸入要擋掉的 CSS 選擇符"="Go to page, "javascript:navigator.ujs_adblock.edit()", , "手動輸入要擋掉的 CSS 選擇符", "Window Mail Compose Icon""
Button8, "View in IE Tab"="Go to page, "javascript:(function(){var h=location.href;if(!h||/^(javascript|about|opera):/i.test(h)){return}window.open().document.write('<html>'+'<head>'+'<title>'+(document.title?document.title:location.href).replace(/</g,'&lt;')+' - view in ie</title>'+'<style type=\x22text/css\x22>body{margin:0;padding:0;}embed{width:100\x25;height:100\x25;}</style>'+'</head>'+'<body>'+'<script type=\x22text/javascript\x22'+'src=\x22data:text/javascript,'+encodeURIComponent('document.write(\'<embed type=\x22application/viewinie\x22 param-location=\x22'+location.href+'\x22></embed>\');')+'\x22>'+'</script>'+'</body>'+'</html>')})();", , "View in IE", "View""
Button9, "View in IE Same Tab"="Go to page, "javascript:(function(){var h=location.href;if(!h||/^(javascript|about|opera):/i.test(h)){return}document.write('<html>'+'<head>'+'<title>'+(document.title?document.title:location.href).replace(/</g,'&lt;')+' - view in ie</title>'+'<style type=\x22text/css\x22>body{margin:0;padding:0;}embed{width:100\x25;height:100\x25;}</style>'+'</head>'+'<body>'+'<script type=\x22text/javascript\x22'+'src=\x22data:text/javascript,'+encodeURIComponent('document.write(\'<embed type=\x22application/viewinie\x22 param-location=\x22'+location.href+'\x22></embed>\');')+'\x22>'+'</script>'+'</body>'+'</html>')})();", , "View in IE Same Tab", "View""
Button10, "繁"="Go to page, "javascript:void(TongWen.trans2Trad(document));", , "繁", "A""
Button11, "简"="Go to page, "javascript:void(TongWen.trans2Simp(document));", , "简", "A""
Button12, "BBS"="Go to page, "file://localhost/C:/ZTerm/ZTermApplet.html", , "BBS", "A""
Button13, "Google 即時小字典"="Go to page, "javascript:function translate(word){var glf=document.getElementById('glf');glf.contentWindow.gtrans(word)};function findAndReplace(searchText,replacement,searchNode){var regex=typeof searchText==='string'?new RegExp(searchText,'g'):searchText,childNodes=(searchNode||document.body).childNodes,cnLength=childNodes.length,excludes='html,head,style,title,link,meta,script,object,textarea,iframe';while(cnLength--){var currentNode=childNodes[cnLength];if(currentNode.nodeType===1&&(excludes+',').indexOf(currentNode.nodeName.toLowerCase()+',')===-1){arguments.callee(searchText,replacement,currentNode)}if(currentNode.nodeType!==3||!regex.test(currentNode.data)){continue}var parent=currentNode.parentNode,frag=(function(){var html=currentNode.data.replace(regex,replacement),wrap=document.createElement('div'),frag=document.createDocumentFragment();wrap.innerHTML=html;while(wrap.firstChild){frag.appendChild(wrap.firstChild)}return frag})();parent.insertBefore(frag,currentNode);parent.removeChild(currentNode)}};function inject(){findAndReplace('\\b[^ ]+\\b',function(term){return'<span onmouseover=\'translate(this)\'>'+term+'</span>'})};function init(){var glf=document.createElement('iframe');glf.id='glf';glf.width=0;glf.height=0;glf.frameborder=0;glf.style.borderWidth='0';glf.style.borderStyle='none';glf.style.position='fixed';glf.style.top='10px';glf.style.right='10px';document.body.appendChild(glf);var doc=glf.contentDocument;doc.open();doc.write('<head><title>Sample html</title><script type=\'text/javascript\' src=\'http://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22language%22%2C%22version%22%3A%221%22%7D%5D%7D\'></script><script type=\'text/javascript\'>function gtrans(word) {if(word.title) return; word.title = \'translating...\'; var text = word.innerHTML; google.language.detect(text, function(result) { if (!result.error && result.language) { google.language.translate(text, result.language, \'zh-tw\', function(result) {if (result.translation) { word.title = text + \': \' + result.translation;}});}});};</script></head><body style=\'margin:0; background-color: transparent;\'><div id=\'branding\' style=\'width : 0px; height : 0px; text-align: left;\'></div></body>');doc.close();inject()};init();", 1, "Google 即時小字典", "Window Chat Room Icon""
Button14, "搜尋已選詞"="Hotclick search, , , "搜尋已選詞", "Search Web""
Button15, "站內搜尋"="Go to page, "javascript:var t=window.location.hostname;var s=prompt('Google site search - enter search string:','');if(s){if(s.match(/^d%5cs.+/)){s=s.substring(2,s.length);t=t.match(/%5b^%5c.%5d+%5c.%5cw{2,4}$/)+''};void(location.href='http://www.google.com/search?q=site:'+t+'+'+s+'&sourceid=opera')}", 1, "站內搜尋", "Search Web""

修改 ZTerm Applet 設定

%USERPROFILE%\.ztermrc(修改過的檔案
設定項 預設值 三太子設定值
external-browser-command explorer "%u" opera "%u"

安裝腳本

整個安裝及修改設定的過程主要是利用 AutoHotKey 所撰寫的腳本,腳本源碼提供如下,給有興趣的朋友參考(注意:這些腳本都是 Big5/ANSI 編碼,但是目前網頁伺服器會送出 UTF-8 標頭,所以請自行指定內容編碼──或者請先下載之後再閱讀):

另外一些小工具也是以 AutoHotKey 撰寫的腳本編譯而成,這些腳本的源碼也提供如下:

如果有人改善了這些腳本,也可以提供給我納入下一版改進,謝謝。

其他工具

為了製作各種不同的套件,我還用了下列這些工具:

打包

最後採用 WinRAR 來打包成自動解壓安裝檔。自動解壓檔的主要設定事項為:

  • 一般設定:解壓縮之後執行 installer.exe 或 patch.exe
  • 模式:解封裝至暫存資料夾
  • 更新:覆寫模式:覆寫所有檔案
  • 文字及圖示:自解檔視窗標題:Opera Nalakuvara
  • 文字及圖示:自解檔標誌、自解檔圖示

另外為了安全起見,還加上這些設定:

  • 一般設定:建立結實壓縮檔
  • 一般設定:放置憑證驗證
  • 一般設定:放置復原記錄
  • 一般設定:測試壓縮檔
  • 一般設定:鎖定壓縮檔
  • 進階設定:復原記錄:10%

為了簡化作業流程,我寫了一個打包用的 AutoHotKey 腳本 build.ahk

佈署

所有的工作檔案都是使用 Perforce 進行版本管理,另一個好處就是檔案更新後祇要遞交(p4 submit)到伺服器後,網頁伺服器就會定期同步更新(p4 sync)。

另外為了減輕檔案下載負擔,因此打包好的專案檔案,會透過 RapidShare 提供下載。(採用 RapidShare 的其中一個原因是,我剛好有購買它的 Premium 帳號,所以不會有太久沒人下載而導致檔案消失的問題。)除了 RapidShare 之外,另外也使用 Coral CDN 的免費分流服務,也就是在下載網址的網域名稱部分,多加上 .nyud.net 即可。

Author: Jedi