https://wiki.greasespot.net/Greasemonkey_Manual :API
Greasemonkey API๋ ์ผ๋ฐ์ ์ผ๋ก ๊ถํ ์๋ ์์ ์ด๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๋๊ธฐ ์์ ์ ๋๋ค. ์ฝํ ์ธ ์คํฌ๋ฆฝํธ์๋ (๊ฑฐ์) API ์ก์ธ์ค ๊ถํ์ด ์์ผ๋ฏ๋ก ๊ถํ ์๋ ์์ ์ ์ํํ๋ ค๋ฉด ๋ฉ์์ง๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค. ์น ํ์ฅ ์ ๋๊ธฐ์ ๋ฉ์์ง ์ ๋ฌ๋ง ๋ฐ์ต๋๋ค(์ธ์ฉ ํ์).
๋ฐ๋ผ์ ๊ฐ ๋ฐฉ๋ฒ์๋ ๊ณ ์ ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ ์ฝ๊ฒ:
GM_getResourceURL
๋ ๋๊ธฐ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์์ฑํด์ผ ํ์ง๋ง ๊ณ์ฐํ๊ธฐ๊ฐ ์ฝ์ง ์์ต๋๋ค.GM_addStyle
๋ ์ฌ์ํฉ๋๋ค.GM_log
๋ ํ๊ธฐ๋๊ฑฐ๋ console.log
๋งคํ๋์ด์ผ ํฉ๋๋ค.GM_openInTab
๊ธฐ๋ฅ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์ง ์์ผ๋ฉฐ ์์๊ฐ ์ค์ํ์ง๋ ์์ต๋๋ค.GM_registerMenuCommand
์๋ ๋๊ธฐ ๋์์ด ์์ต๋๋ค.GM_setClipboard
๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์ง ์์ต๋๋ค.GM_xmlhttpRequest
๋ ์์ ํ ๋น๋๊ธฐ์์
๋๋ค.๋ ์ด์ฌํ:
GM_deleteValue
๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ์ง ์์ต๋๋ค. ์์๋ ์ฌ์ ํ ์ค์ํฉ๋๋ค(์ฆ, X์ ์ญ์ ๋ ํฅํ X ์งํฉ๋ณด๋ค ๋จผ์ ๋ฐ์ํด์ผ ํจ).GM_setValue
๋ ์ญ์ ์ ๋์ผํฉ๋๋ค. ๋๊ธฐ ๊ฒฐ๊ณผ๋ ์์ง๋ง ์์๊ฐ ์ค์ํฉ๋๋ค.์ด์ฌํ:
GM_getValue
๋ ๊ฒฐ๊ณผ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค.GM_listValues
๋ ๋๊ธฐ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. (ํ๋ฌ์ค AFAICT ์คํ ๋ฆฌ์ง ๋ ์ข์ ์ง์ API๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ ์ผํ ์ต์
์ ์ด๋ฆ์ผ๋ก ํ๋์ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ๋ชจ๋ ์ด๋ฆ ๊ณผ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ ์
๋๋ค. ์๋ฅผ ๋ค์ด ์คํฌ๋ฆฝํธ๋ก ๋ถ๋ฆฌํ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.)GM_getResourceText
๋ ๋๊ธฐ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ ๋งค์ฐ ํฐ ๊ฐ์ผ ์ ์์ต๋๋ค. (์ฆ, ๋ฉ๋ชจ๋ฆฌ์ ๋ชจ๋ ๋ฏธ๋ฆฌ ์บ์ฑํ๋ ๊ฒ์ ๋๋ฌด ๋น์ ์ ์์ต๋๋ค.)์ฌ๊ธฐ์์ bug1323433 ๋ฐ bug1332273 ์ด
ํฌ์ธํฐ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ ๋ค ๋งค์ฐ ์ ์ฉํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
์ค, ์๋ง๋ ์ด๋ ์ ๋์ ๋๊ธฐ ๋ฉ์์ง ์ ๋ฌ์ด ๊ฐ๋ฅํ ๊ฒ์ ๋๋ค!
์ด๊ฒ์ ํ ์คํธํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ์์์ ํธ์ถ๋ ๋ฉ์๋์ ๋ํด ๊ฐ๋จํ ๋๊ธฐ ๊ตฌํ(๋ฐฑ๊ทธ๋ผ์ด๋ ์ ์ฉ API ์ง์)์ ์ฌ์ฉํ ์ ์์ต๋๊น?
์ด๋ ์ฝํ ์ธ ์ธก๋ฉด์์ ์ฝ์์ ๋ฐํํ๋ฏ๋ก ์ฌ์ค์ ๋น๋๊ธฐ์์ ๋๋ค. ์ฌ๊ธฐ์์ "๋๊ธฐ์"์ ์๋ชป๋ ์ด๋ฆ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ๋ณด๋ฅ ์ค์ธ ์๋ต์ ์๋์ผ๋ก ์ถ์ ํ ํ์๊ฐ ์๋๋ก ์์์์ ๋ถ๋ชจ๋ก ๋ฉ์์ง๋ฅผ ์๋ต๊ณผ ์ฐ๊ฒฐํ๋ ๊ฒ๊ณผ ๋น์ทํฉ๋๋ค.
Afaik์์ ์ฌ์ฉํ ์ ์๋ ์ ์ผํ ๋๊ธฐ API๋ ๋๊ธฐํ XHR์ด๋ฉฐ ์น ์์ฒญ ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ผ๋ก ๊ฐ๋ก์ฑ ์ ์์ต๋๋ค.
Sync XHR์ด ์ฝํ ์ธ ์คํฌ๋ฆฝํธ์์ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค: https://bugzilla.mozilla.org/show_bug.cgi?id=1360968, ๊ทธ๋์ ์ง๊ธ์ ์ฝํ ์ธ > ๋ฐฐ๊ฒฝ์์ ๋๊ธฐํ ์ฑ๋์ด ์์ต๋๋ค.
GM_setValue
๋ฐ GM_getValue
๊ฐ ๋๊ธฐํ ์์
์ผ๋ก ์ค๊ณ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ๋จ์ผ ํ๋ก์ธ์ค ๋ธ๋ผ์ฐ์ ์์๋ ์ฌ๋ฌ ํญ์์ ์์
ํ ๋ ์ ๋๋ก ์๋ํ์ง๋ง e10์์๋ ์๋์(https://github.com/greasemonkey /greasemonkey/issues/2427). ์ด์ ํ์ฅ API๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ๋ณต๊ตฌํ ์ ์์ง๋ง WebExt์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋๊ธฐํ ๋ฉ์์ง๊ฐ ์์ผ๋ฉด(์์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์๋ ์งง์ ๊ฐ๋ง ๋ด๋ณด๋) ๋ ๋ง์ ํญ ๊ฐ์ ๊ฐ์ ์ ์ ํ๊ฒ ๋๊ธฐํํ ์ ์์ต๋๋ค. ์ด๋ ์์ ์์ ์ด๊ฒ์ ํญ์ ๊ฒฝ์ ์กฐ๊ฑด์ด ๋ ๊ฒ์
๋๋ค.
WebExt ๋ฒ์ ์์ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋ ์๋ก์ด set/get ๋ฉ์๋๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก ์ค์ํ ๊ฒฝ์ฐ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ฌธ์์๋ ์ฌ๋ฌ ํญ์์ ์๋ํ ๋ GM_setValue
๋ถ์กฑ ๋ฐ GM_getValue
๋์์ ๋ํ ์ ๋ณด๊ฐ ์์ด์ผ ํฉ๋๋ค.
imo, ์ฌ๋ฌ ํญ์์ GM_setValue
/ GM_getValue
๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ฉฐ ์์๋ฅผ ๋ฐ๋ผ์ผ ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฝํ
์ธ ์คํฌ๋ฆฝํธ์ _GM_values_์ ๋ณต์ฌ๋ณธ(์บ์)์ ์ ์ฅํ๊ณ , ํญ์ ์บ์์์ ์ฝ๊ณ , ๋น๋๊ธฐ์์ผ๋ก ๋ค์ ์ฐ๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ์ ์ํด ํธ๋ฆฌ๊ฑฐ๋ ์ด๋ฒคํธ๋ก ์บ์๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ฒ์ด ํ์ฉ ๊ฐ๋ฅํ ์๋ฃจ์
์ด์ด์ผ ํฉ๋๋ค.
btw, ๊ทธ๋ ๋ค๋ฉด GM_addValueChangeListener
ํด๋นํ๋ API๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ฉด ์ข์ต๋๋ค. (๊ทธ๋ฆฌ๊ณ ๋๋ addValueChangeListener
๋ผ๋ ์ด๋ฆ์ด ์ซ๋ค.
๋ด dev ๋ธ๋์น ์๋ ๋ค์ ์ด ์ง์๋ฉ๋๋ค.
GM.getResourceURL
GM.deleteValue
, GM.getValue
, GM.listValues
, GM.setValue
๋ค์์ ์ถ๊ฐํ์ง ์์ ๊ณํ์ ๋๋ค.
GM_log
GM_addStyle
์ฐ๋ฆฌ๋ ์ฌ์ ํ ํ์ํฉ๋๋ค :
GM_xmlhttpRequest
๋๋ ์ฐ๊ธฐํ ๊ณํ์ ๋๋ค.
GM_registerMenuCommand
(์ด๊ฒ์ ํญ์ ๋ง๋ํ ์ง์ ๋น์ฉ์ด์์ต๋๋ค)GM_getResourceText
์ด๋ ์ฌ๊ธฐ์ ์งํ ์ํฉ์ด ์ค์ ๋ก ๋งค์ฐ ๊ฐ๊น๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ ์ปค๋ฐ์์ ์ข์ ํผ๋๋ฐฑ์ ์์ง ๋ง์ธ์.
๋ฐฉ๊ธ ์๋ก์ด ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํด ๋ณด์์ต๋๋ค. GM_xhr ๊ธฐ๋ฅ ์์ด ๊ต์ฐจ ๋๋ฉ์ธ xhr ์์ฒญ์ด ์ด๋ฏธ ํ์ฑํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ด ๊ณผ์ฐ ํ๋์ธ๊ฐ?
๋ค์ ์ฝ๋๋ก userscript grant none์ ์๋ํ์ญ์์ค.
fetch(prompt()).then(resp => resp.text()).then(text => alert(text)).catch(error => alert(error));
์ด, ํ์ธํ์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ์ฌ ํ์ฅ์ ๋ชจ๋ ๊ถํ๊ณผ ํจ๊ป ํ์ฅ์ "์ฝํ ์ธ ์คํฌ๋ฆฝํธ"๋ก ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ณ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋ํด ์กฐ๊ธ ์กฐ์ฌํ์ง๋ง ์ง๊ธ๊น์ง๋ ๊ถํ์ด ์๋("์น ๋ฒ์" - "์ฝํ ์ธ " ๋ฒ์๊ฐ ๋ชจํธํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ด๋ป๊ฒ ๋ถ๋ฅด๋์?!) ๋ด๊ฐ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ์ ํ์ด์ง์ CSP์ ์ํด ์ฐจ๋จ๋ ์ ์๊ฑฐ๋ ์ฐจ๋จ๋ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
ํ์ฌ CSP๋ฅผ ์์ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ชจ๋ ๋ฌธ์ ์์ฒญ์ ๋ํ ํค๋๋ฅผ ๊ฐ๋ก์ฑ๊ณ ์์ ํ๋ ๊ฒ์ ๋๋ค. ์ฝํ ์ธ CSP์์ webextensions๋ฅผ ์ ์ธํ๋ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๊ฐ ์์ง๋ง ์ด์ ๋ํ ํ๋์ ๋ง์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
<script>
ํ๊ทธ๋ฅผ ์ฝ์
ํ๋ ๊ฒ ์ธ์๋ window.eval
๋ ํ์ด์ง ๋ฒ์์์ ์คํ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ณต์ ์ฉ์ด๋ "์ฝํ ์ธ ์คํฌ๋ฆฝํธ ๋ฒ์"์ "ํ์ด์ง ๋ฒ์"์ ๋๋ค.
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ GM API๋ฅผ ์ ์ํ ์ ์๋ ๋ณ๋์ ๋ฒ์๋ก ๋ํํ๊ธฐ ์ํด ๋ฌธ์์ด ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ํ webextensions์์ Sandbox
ํด๋นํ๋ ๋ฒ๊ทธ๋ฅผ ์ ๊ณ ํ์ง๋ง ์ฐ์ ์์๊ฐ ๋์ง ์์ต๋๋ค.
AIUI๋ script์ eval ๋ชจ๋ CSP์ ์ํ ์ฐจ๋จ์ ์ทจ์ฝํฉ๋๋ค. ๊ทธ๋ฌ๋ eval์ด ๊ถํ์ ์ญ์ ํ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
https://bugzilla.mozilla.org/show_bug.cgi?id=1391669
์ ์ฌ์ ์ผ๋ก ๋ชจ๋ ํ์ด์ง์์ ์ฝํ
์ธ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ค๋ฉด <all_urls>
๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์๊ตฌํ๋ค๋ฉด, ์ฐ๋ฆฌ์ ์ฝํ
์ธ ์คํฌ๋ฆฝํธ๋ ๊ทธ๊ฒ์ ์ป์ต๋๋ค. ๋ฐ๋ผ์ XHR์ ์ด๋์์๋ ๊ฐ๋ฅํฉ๋๋ค.
์ ์ด๋ Firefox( https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#Using_eval ()_in_content_scripts )์์๋ ํ์ด์ง ๋ฒ์๋ก ๋๋กญ๋ค์ดํ ์ ์์ง๋ง ์ค์ ๋ก๋ ํ์ด์ง ๋ฒ์์ด๋ฉฐ ํ์ด์ง์์ ์คํ ์ค์ธ ๋ชจ๋ ํญ๋ชฉ(AFAIK)์ API๋ฅผ ๋ ธ์ถํ์ง ์๊ณ ๋ API๋ฅผ ์คํฌ๋ฆฝํธ์ ์์ ํ๊ฒ ๋ ธ์ถํ ์ ์์ต๋๋ค.
์ฝํ
์ธ ์คํฌ๋ฆฝํธ์์ fetch ๋ฐ xhr์ ๋ฎ์ด์ธ ์ ์์ต๋๊น?
์์ฒด CORS ๊ฒ์ฌ๋ฅผ ์ํํ๋ ์์ ๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
GM.xmlhttpRequest()
๊ฐ 60a50d05b1e565571d8a3e638b0683a1a9c2beaa์ ์ถ๊ฐ๋์์ต๋๋ค.GM.getResourceText()
๋ #2548์์ ๋ค๋ฃฐ ๊ฒ์
๋๋ค.GM.registerMenuCommand()
์(๋) ์๋์ ์ผ๋ก ๊ฑด๋๋ฐ๊ณ ์์ต๋๋ค.@the8472 https://github.com/greasemonkey/greasemonkey/issues/2232#issuecomment -326841025์์ withUnsafeWindow()
๊ตฌํ์ ์ฐธ์กฐํ์ญ์์ค.
์ด์ with (object) ...
ํจ์์ ๋์์ ๋ชจ๋ฐฉํ์ฌ ์กฐ๊ธ ๋ ์์ ํฉ๋๋ค. (์ต์ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ํฉ๋๋ค.)
@arantius ๋ 7์ 25์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๋ค์์ ์ถ๊ฐํ์ง ์์ ๊ณํ์ ๋๋ค.
GM_log GM_addStyle
์ด๊ฒ๋ค์ ์ด ํฐ์ผ์ ๋ง๋ค ๋( 3์ 3์ผ @arantius ์ ์ํด) ์ฌ์ํ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค(GM_log๋ฅผ console.log์ ๋งคํํ๋ค๊ณ ๊ฐ์ ).
๋ด ๊ฒฝํ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ ๊ฐ์ง API ํธ์ถ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ฒ๋ฆฌ๋ฉด ์๋ฌด ์ด์ ์์ด ์ค๋๋ ์คํฌ๋ฆฝํธ๊ฐ ๋ง์ด ๊นจ์ง์ง ์์ต๋๊น? ์๋๋ฉด dev ๋ธ๋์น๋ฅผ ๋ ์ ์ ์ผ๋ก ์ธ๊ธํ์ จ์ต๋๊น?
Tampermonkey์์ GM_addStyle
์๋ CSP ์ ํ์ ์ฐํํ ์ ์๋ ์คํ์ผ์ ์ฝ์
ํ๋ ํน๋ณํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค(์ธ๋ผ์ธ <style>
์ด ๊ธ์ง๋ ๊ฒฝ์ฐ). Greasemonkey์์๋ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค๋ฉด ๊ธฐ์ ๊ฒ์
๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Tampermonkey์์
GM_addStyle
์๋ CSP ์ ํ์ ์ฐํํ ์ ์๋ ์คํ์ผ์ ์ฝ์ ํ๋ ํน๋ณํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค(์ธ๋ผ์ธ<style>
์ด ๊ธ์ง๋ ๊ฒฝ์ฐ). Greasemonkey์์๋ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค๋ฉด ๊ธฐ์ ๊ฒ์ ๋๋ค.