Tampermonkey的的真名
對于unsafeWindow
這個擴(kuò)展歷史有一些了解的朋友竞阐,都知道辰企。
它的真名并不叫“油猴”,而應(yīng)該叫“篡改(tamper)猴”。
只是因為GreasyMonkey
出現(xiàn)比較早椰苟,而且大名鼎鼎。并且早期沿用的習(xí)慣树叽,相當(dāng)于奠定了用戶腳本擴(kuò)展的標(biāo)準(zhǔn)舆蝴。
所以,雖然現(xiàn)在Tampermonkey
比GreasyMonkey
兼容性更好题诵,但是名字依然被大眾習(xí)慣性的叫做“油猴”了洁仗。
不太恰當(dāng)?shù)谋扔?/h5>
平時的一些腳本,用來增強(qiáng)網(wǎng)頁功能或者進(jìn)行一定的改造性锭。但是終究隔著一堵墻赠潦。
腳本的變量和函數(shù)沒法被網(wǎng)頁本身直接操縱。
同樣草冈,腳本也無法直接操控網(wǎng)頁的變量和函數(shù)她奥。
但是,叔叔要說但是了怎棱,
有了 unsafeWindow
哩俭, 一切就變得不同了。
就像原來兩個公司明面上能夠進(jìn)行一些合作拳恋,但是終究沒有辦法按照自己的意愿隨意操縱對方的內(nèi)部運(yùn)行凡资。
有了unsafeWindow
,通過這個橋梁就能夠輕松打通兩者的內(nèi)部谬运。
所以我把unsafeWindow
比喻成間諜隙赁。通過這個“間諜”實現(xiàn)直接操控對方內(nèi)部運(yùn)作的功能。
在瀏覽器面板直接調(diào)試用戶腳本
很長一段時間吩谦,我調(diào)試用戶腳本鸳谜,只能夠是,
先在編輯器調(diào)整功能式廷,然后再去刷新網(wǎng)頁咐扭,接著查看控制面板的信息。接著調(diào)試滑废。
雖然有 VS Code 配合 Live Server 實時刷新蝗肪,終究是不方便。
如此循環(huán)往復(fù)蠕趁。
后來終于有一天我想通了薛闪。可以把unsafeWindow
的功能接口全部綁到Window對象上面俺陋。這樣我就能夠在瀏覽器Console面板豁延,隨心所欲地Console了昙篙。
走開,叔叔要開始 裝逼 敲代碼了
- 首先诱咏,授權(quán)上面要有
// @grant unsafeWindow
- 第二步苔可,把相應(yīng)權(quán)限全部綁定給
Window
,
第一第二步具體代碼如下:
// ==UserScript==
// @name Tampermonkey to Window
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 把 Tampermonkey 功能放到全局
// @author You
// @match http://localhost:8080/
// @run-at document-start
// @grant unsafeWindow
// @grant GM_addStyle
// @grant GM_deleteValue
// @grant GM_listValues
// @grant GM_addValueChangeListener
// @grant GM_removeValueChangeListener
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_log
// @grant GM_getResourceText
// @grant GM_getResourceURL
// @grant GM_registerMenuCommand
// @grant GM_unregisterMenuCommand
// @grant GM_openInTab
// @grant GM_xmlhttpRequest
// @grant GM_download
// @grant GM_getTab
// @grant GM_saveTab
// @grant GM_getTabs
// @grant GM_notification
// @grant GM_setClipboard
// @grant GM_info
// ==/UserScript==
unsafeWindow.GM_setValue = GM_setValue;
unsafeWindow.GM_getValue = GM_getValue;
unsafeWindow.GM_addStyle = GM_addStyle;
unsafeWindow.GM_deleteValue = GM_deleteValue;
unsafeWindow.GM_listValues = GM_listValues;
unsafeWindow.GM_addValueChangeListener = GM_addValueChangeListener;
unsafeWindow.GM_removeValueChangeListener = GM_removeValueChangeListener;
unsafeWindow.GM_log = GM_log;
unsafeWindow.GM_getResourceText = GM_getResourceText;
unsafeWindow.GM_getResourceURL = GM_getResourceURL;
unsafeWindow.GM_registerMenuCommand = GM_registerMenuCommand;
unsafeWindow.GM_unregisterMenuCommand = GM_unregisterMenuCommand;
unsafeWindow.GM_openInTab = GM_openInTab;
unsafeWindow.GM_xmlhttpRequest = GM_xmlhttpRequest;
unsafeWindow.GM_download = GM_download;
unsafeWindow.GM_getTab = GM_getTab;
unsafeWindow.GM_saveTab = GM_saveTab;
unsafeWindow.GM_getTabs = GM_getTabs;
unsafeWindow.GM_notification = GM_notification;
unsafeWindow.GM_setClipboard = GM_setClipboard;
unsafeWindow.GM_info = GM_info;
// 下面接著寫需要執(zhí)行的其他代碼
console.log("Woonigh 好帥~~")
- 第三步,可以在瀏覽器開發(fā)面板上面直接調(diào)用腳本API袋狞。
比如發(fā)個通知什么的焚辅。嘗試在 Console 面板執(zhí)行代碼發(fā)個通知吧:
GM_notification({
title: 'Console 通知:',
text: 'Hello, 我是Console面板發(fā)出的通知啊',
duration: 2000
})
當(dāng)然,如果你只需要用其中的某一個或者某幾個苟鸯,
就不用像我上面那樣全部都授權(quán)和綁定到Window
同蜻。
寫在結(jié)尾
好了,啰嗦了這么多早处,見識淺陋湾蔓,莫怪 ▄█?█●
有疑問也歡迎私信我