๊ณผ๊ฑฐ์๋ ํ์ผ> .user.js
์ด ์ ์์๊ณ ์ค์น๋์์ต๋๋ค. ์ง๊ธ๊น์ง 4.0์์๋ ์๋ฌด ์์
๋ ์ํํ์ง ์๊ณ ํ์ผ๋ง ์ฝ๋๋ค.
์๋ง๋ ์ด๊ฒ์ (ํจํด ๋ฌธ์ ์ผ์น)? ๊ตฌ์ฑํ์ ๋ํ ์ผ์น ์ ํ๊ธฐ ์์ *
๋ฅผ ์ฌ์ฉํ๋ฉด http ๋๋ https๋ก๋ง globs๋ฉ๋๋ค. file://
๋ํ ์ถ๊ฐ ์ผ์น๋ฅผ ์ ์ํ์ญ์์ค.
๊ทธ ๋๋ <all_urls>
์ ํ๊ธฐ.
file:///
์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์งํ๊ธฐ ์ํด ์ผ์น ํจํด์ ์ถ๊ฐํ๋ฉด ํด๋น URL์ ๋ด์ฉ์ ์ฝ์ง ๋ชปํ๋ XHR์ ์์ํ๊ฒ ๋๋ฉฐ ์ด๋ ๋๋ผ์ด ์ผ์
๋๋ค.
๋๋ ์ด๊ฒ์ ๋ํด ์กฐ๊ธ ์กฐ์ฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ๋ ๊ฐ์ง ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ๋ฌธ์ ๋ ์ฌ์ง์ด XHR์ ํตํด ์ฝ๊ธฐ ์ ์ฉ ๊ฒฝ์ฐ (; ํธ์ง ์ง์ ์๋ ์์ค, WebExtensions์ ํ์ผ ์์คํ ์ก์ธ์ค๋ฅผ ํ์ฉํ์ง์ ํจ๊ป ํ ํ์๊ฐ ์์ต๋๋ค ์ ์์ต๋๋ค ์ฌ๊ธฐ์ ๋งจ ์๋์). ๋๋ ๋์ผํ ์ถ์ฒ ์ ์ฑ ๊ณผ ๊ด๋ จ๋ ์ ์์ต๋๋ค.
Gecko 1.9๋ถํฐ ํ์ผ์ ํน์ ๋ค๋ฅธ ํ์ผ๋ง ์ฝ์ ์ ์์ต๋๋ค. ํนํ ํ์ผ์ ์๋ ํ์ผ์ ์์ ๋๋ ํ ๋ฆฌ๊ฐ ๋์ ํ์ผ์ ์์ ๋๋ ํ ๋ฆฌ์ธ ๊ฒฝ์ฐ์๋ง ๋ค๋ฅธ ํ์ผ์ ์ฝ์ ์ ์์ต๋๋ค.
file://
ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋งค๋ํ์คํธ์ ์ ์๋ ๊ฒฝ๋ก์ ๋ํ ํ์ผ ์์คํ
์ก์ธ์ค๋ฅผ ํ์ฉํ๊ธฐ ์ํด ๋ฒ๊ทธ ๋ณด๊ณ ์์์ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์, ์๋ง๋ "ํ์ผ ์์" ๊ท์น์ผ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ๋ํ ๊ณต์์ ์ธ ์ง์นจ์ ์ด๋์์ ์ป์ ์ ์๋์ง ๋ชจ๋ฅด์ง๋ง ์ง๊ธ ์๊ฐํด๋ณด๋ฉด ๊ทธ๊ฒ์ด ์ฌ์ค์ด๋ผ๋ ๊ฒ์ ์๋๋ค. ์ ํ์ผ์ ๋ง๋ค๊ธฐ ์ํ ๋ค์ด๋ก๋ API์ ๊ฐ์ ๋งค์ฐ ํน๋ณํ ์์ธ๋ง ๋ฐ์ํฉ๋๋ค.
๋๋๊ทธ/๋๋กญ์ ์ง์ ์ฒ๋ฆฌํ๊ฑฐ๋ (LOL) ์ด๋ฏธ ์ด๋ ค ์๋ ํญ์ ๋ด์ฉ์ ์ฝ๋ ๊ฒ๊ณผ ๊ฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ชจ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ ์์ด์ฝ/๋ฆฌ์์ค/์๊ตฌ ์ฌํญ์ ๊ฐ์ ธ์ค์ง ๋ชปํ๋ฏ๋ก ๋ ๋ง์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ฌ์ ํ ์งํ๋์ง ์์ต๋๋ค.
์ค์น ํ์ด์ง๋ก ์ด๋ํ๊ธฐ ์ ์ url์ ํค๋ก ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ๋ฅผ ์บ์ํ๊ธฐ ์ํด storage.local ์ ์ฌ์ฉํ ์ ์์ต๋๊น? ์ด๋ฏธ ๋ณ์์ ๋ด์ฉ์ด ์์ต๋๋ค. ๋ฌผ๋ก ์บ์๋ ์ผ๋จ ์ค์น๋๊ฑฐ๋ ์ค์น๋์ง ์์ ๊ฒฝ์ฐ ์ง์์ผ ํฉ๋๋ค. WebExtensions์ ์ผ์ข ์ ์์ ์ ์ฅ์๊ฐ ์์ด์ ์๋์ผ๋ก ์ ๊ฑฐ๋ฅผ ์ฒ๋ฆฌํ ํ์๊ฐ ์๋ค๋ฉด ๋ ํธ๋ฆฌํ ๊ฒ์ ๋๋ค.
๋๋ ๋ด๊ฐ ๋งํ ๊ฒ์ ์ด์ง๋ฝํ๊ณ ์๊ฐํ๋ ๊ฒ๋งํผ ๊ฐ๋จํ์ง ์์ต๋๋ค. ์ฒซ์งธ, ๋ชจ๋ ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ๋ browser.storage.local
์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก ๋ณธ์ง์ ์ผ๋ก Greasemonkey์ ๊ฐ์ ์ ๋์จ์ ์ํ ์์ ํ์ง ์์ ์ ์ฅ์์
๋๋ค. ๋์งธ, ๋ฉ์์ง๋ฅผ ํตํด ์ฝํ
์ธ ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ก ๋ณด๋ด๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๋ฉ์์ง๊ฐ script-detect.js
์์๋ง ์ ์ก๋์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์คํฌ๋ฆฝํธ์ ๋น๋๊ธฐ์ ํน์ฑ์ผ๋ก ์ธํด script-detect.js
๊ฐ ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ๋ณด๋ค ๋จผ์ ์คํ๋๋์ง ์์ ํ ํ์ ํ ์ ์์ต๋๋ค(๋ช ๊ฐ์ง ํ
์คํธ๋ฅผ ์ํํ ์์ ์
๋๋ค).
๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก ๋ด๊ฐ ์ค์ํ์ง ์๋ ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํฌ๋ฆฝํธ๋ ํ์ ์์ ๊ธฐ์์ DOM/์ฝํ ์ธ ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์์ ํ์ง ์์ต๋๊น?
๋น์ ๋ฐํ ์ฌ์ฉํ์ฌ ํ์ด์ง ๋ด์ฉ ์ป์ ์ onBeforeRequest
์ ์ผ์น์ ['*://*/*.user.js']
๋ค์ ์์ฑ StreamFilter์ . ๋๋ ์ต๊ทผ์ ๊ฒ์ํ ๋ธ๋์น ์์ ์ด๊ฒ์ ํ
์คํธํ๋ ๋ช ๊ฐ์ง ์ฝ๋๋ฅผ ๊ตฌํํ์ต๋๋ค. ์๋ฌด ๊ฒ๋ _์์ _ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ์ฌ๋ก์๋ ํ ๋ฆฌํ์คํธ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๊ฒ์๋ฌผ์์ ์ ๊ธฐํ ๋ณด์ ๋ฌธ์ ๋ฅผ ํผํ ์ ์์ต๋๋ค.
๋ถํํ๋ ๊ทธ๊ฒ์ ๋
ผ์๋ ํ์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ํ ๋ช ๊ฐ์ง bugzilla ํฐ์ผ:
https://bugzilla.mozilla.org/show_bug.cgi?id=1341341
https://bugzilla.mozilla.org/show_bug.cgi?id=1266960
# 2671์์ ์ฌ๊ธฐ๋ก ์๋ด๋์์ต๋๋ค.
์ด ์ค๋ ๋๊ฐ ๋ก์ปฌ ํ์ผ์์ ๊ฐ์ ธ์ค๊ธฐ์ ๊ดํ ๊ฒ์ด๋ผ๋ฉด .... ๊ทธ๋ฌ๋ฉด ...
๋ก์ปฌ ํ์ผ์ ์ฝ๊ธฐ ์ํด XHR์ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ถ์ฒ ๋ฐ ๊ถํ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์ข
๋ฅ์ ํฉ๋ณ์ฆ์ ์ ๋ฐํฉ๋๋ค.
์ฌ์ด ๋ฐฉ๋ฒ์ input type="file"
์ ๊ฒฐ๊ณผ์์ new FileReader()
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
์ด ์ค๋ ๋๊ฐ file:///.....user.js
URL์ ์คํฌ๋ฆฝํธ๋ก ์ธ์ํ๊ณ ์ค์นํ๋ ๊ฒ์ด๋ผ๋ฉด ๊ทธ๊ฒ์ ๋ค๋ฅธ ๋ฌธ์ ์ด๊ณ ๋ค๋ฅธ ์๋ฃจ์
์
๋๋ค.
์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๋ ฅ type="file"์ ๊ฒฐ๊ณผ์์ new FileReader()๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์, ์ด๊ฒ์ ํจ๊ณผ๊ฐ ์์ ์ ์์ต๋๋ค. file://
๊ฒฝ๋ก๋ก ์ด๋ํ๊ณ ํ์ฅ ํ๋ก๊ทธ๋จ์ด ๋ชจ๋ ๊ฒ์ ์ํํ๋๋ก ํ๋ ๊ฒ๋งํผ ์ฐ์ํ์ง๋ ์์ง๋ง ์๋ํ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ์ํฌํ๋ก๋ ๋์ผํ๊ฒ ์ ์ง๋ ์ ์์ต๋๋ค.
import script -> script selected -> contents cached in backend -> install dialog prompt -> retrieve content from backend -> continue install as usual
ํ์ ์ํฌํ๋ก๋ฅผ ์ ์งํ๋ ค๊ณ ํ ๋ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ๋ฐฉ๋ฒ๋ณด๋ค ํจ์ฌ ์์ ํฉ๋๋ค.
"input type="file""์ ์ฌ์ฉํ์ฌ ์๋ํ๋ webextension ์์ ๋ฅผ ์ฐพ์์ต๋๋ค. ์บ์ํ ํ์๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
https://github.com/mdn/webextensions-examples/pull/171/files/6c066cfff4e8c662984f704cb17c8b39211ed062#diff -098de1750b345156f3cfd46f8199a
์บ์ํ ํ์๊ฐ ์๋ ๊ฒ ๊ฐ๊ณ ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์บ์๊ฐ _ํ์ํ๋ค๋ ๊ฒ์ด ์๋๋ผ ์คํ๋ ค ์์ ์กฐ์น์ ๋๋ค. .user.js๋ก ์ด๋ํ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํฌ๋ฆฝํธ์ ๋ํ ๋ช ๊ฐ์ง ์ ๋ณด๋ฅผ ์๋ ค์ฃผ๋ ๋ํ ์์๊ฐ ๋ํ๋ฉ๋๋ค. import๋ฅผ ํ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ์ค์น ๋ฒํผ์ ํด๋ฆญํด๋ ์ฌ์ ํ ์ฌ์ฉํ ์ ์๊ณ ์ฌ์ฉ์์๊ฒ ๋ค์ ๋ฉ์์ง๋ฅผ ํ์ํ ํ์๊ฐ ์๋๋ก ์คํฌ๋ฆฝํธ ๋ด์ฉ์ ์ผ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ ์ด๋๊ฐ์ ์ ์ฅํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ด ์คํ ๋ฆฌ์ง API๋ฅผ ์ฌ์ฉํ์ฌ ์บ์๋๋์ง ์๋๋ฉด ์ด๋๊ฐ์ ์ ์ญ ๊ฐ์ฒด์ ์บ์๋๋์ง ์ฌ๋ถ๋ ์ํฌํ๋ก์์ ํนํ ์ค์ํ์ง ์์ต๋๋ค.
๋ํ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ์ ๋ง์ด๊ทธ๋ ์ด์ ๋ฌธ์ ๊ฐ ์๋ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ ์ต์ฐ์ ์์[1]๊ฐ ๋์ด์ผ ํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. 3.x์์ ํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
[1] @arantius ๊ฐ ํ๋ก์ธ์ค๊ฐ ์ด๋ป๊ฒ ์๋ํด์ผ ํ๋์ง์ ๋ํ ์์ด๋์ด๊ฐ ์์ผ๋ฉด
์์ ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฌ๋ฌ ์ ๋์จ์ import./Export๊ฐ ์์ต๋๋ค.
๊ฐ์ ธ์ค๊ธฐ๋ ์ฌ์ฉ์๊ฐ ์์ํ๋ฏ๋ก ์ถ๊ฐ ์๋ฐฉ ์กฐ์น/ํ์ /์๋ฆผ/๊ฒฝ๊ณ ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
๋ํ ์์ ์ค ํ๋์ ๊ฐ์ ธ์ค๊ธฐ ๋ฒํผ(ํ์ผ ์
๋ ฅ) ์ถ๊ฐ
์ฌ์ฉ์๊ฐ ํด๋ฆญํ๋ฉด ํ์ผ ์ ํ๊ธฐ๊ฐ ์ด๋ฆฝ๋๋ค. ์ฌ์ฉ์๋ ํ์ํ ํ์ผ์ ์ ํํ๊ณ ์ด๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค(๋ชจ๋ ๋ด์ฅ HTML5).
ํ์ผ์ ์ฝ๊ณ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค.
USER ์คํฌ๋ฆฝํธ์ ๋ถํฉํ๋ฉด IDB์ ์ถ๊ฐ๋ฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์คํ ์ค์ธ ๋ฆฌ์ค๋๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
๊ทธ๊ฒ ๋ค์ผ....
๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ณธ ์ค์ , ํ ๋ง ๋ฐ์ดํฐ(์ต๋ 500kb) ๋ฐ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ์ด ์๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ง์ ๋ค๋ฅธ ํญ๋ชฉ์์๋ ๋์ผํ ์์ ์ ์ํํฉ๋๋ค.
๋ํ ๊ฐ์ ธ์ค๊ธฐ ๊ธฐ๋ฅ์ด ์ต์ฐ์ ์์๊ฐ ๋์ด์ผ ํ๋ค๊ณ ๋ง์๋๋ฆฌ๊ณ ์ถ์ต๋๋ค[1]
์ค์ ๋ก .... ์คํฌ๋ฆฝํธ ์์ฑ์๊ฐ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ ์คํํ๊ฑฐ๋ ํ ์คํธํ๊ธฐ ์ํด ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ GM3 -> 4 ์ ๊ทธ๋ ์ด๋์ ๊ฒฝ์ฐ ๋๋ฝ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ฝ๋์ ๊ธฐ๋ฅ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค... ๋ช ์๊ฐ ์์ ์๋ฃํ ์ ์๋ ๋ช ์ค์ ์ฝ๋์
๋๋ค.
์ํ๋ ๊ฒฝ์ฐ ๋ด ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
... ๊ฐ์ ธ์ค๊ธฐ๋ ์ฌ์ฉ์๊ฐ ์์ํ๋ฏ๋ก ์ถ๊ฐ ์๋ฐฉ ์กฐ์น/ํ์ /์๋ฆผ/๊ฒฝ๊ณ ๊ฐ ํ์ํ์ง ์์ต๋๋ค. ... USER Script์ ๋ถํฉํ๋ฉด IDB์ ์ถ๊ฐ
๋๋ ์ด๊ฒ์ ๋ํด ํ์ ํ์ง ๋ชปํ๋ค. ๋๋ ํนํ ํ์ค ์ค์น ๋ํ ์์๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. ์๋ง๋ @arantius ๊ฐ ์ ๋์จ์์ ๋ณด๊ณ ์ถ์ ๊ฒ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ค ์ ์์ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ๋ํด ํ์ ํ์ง ๋ชปํ๋ค. ๋๋ ํนํ ํ์ค ์ค์น ๋ํ ์์๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค.
ํ์ค ๋ํ๋ ์ฌ์ฉ์๊ฐ ์๊ฒฉ ์์ค์ ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ์ ์ง๋ฉดํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ์ธ ๋ํ๊ฐ ํ์ํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์์ํ ๊ฒฝ์ฐ:
- ์ฌ์ฉ์๋ ์ฌ์ฉ์๊ฐ ์ ํํ ์คํฌ๋ฆฝํธ๋ก ์ด๋ํฉ๋๋ค.
ํ์ง๋ง ์ด๊ฒ์ ๋ฐฉ๋ฒ์ด ์๋๋๋ค... ์ค์น๋ ์ฝ๋ฐฑ(*.user.js์์ ํธ๋ฆฌ๊ฑฐ)์ ๋๋ค...
ํ์ง๋ง ์ด๊ฒ์ ๋ฐฉ๋ฒ์ด ์๋๋๋ค... ์ค์น๋ ์ฝ๋ฐฑ(*.user.js์์ ํธ๋ฆฌ๊ฑฐ)์ ๋๋ค...
ํ์ฌ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ก์ปฌ ํ์ผ์ ๋ํ ๊ฐ์ ธ์ค๊ธฐ ๋ฒํผ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ file://
์ ๋ํ ํ์์ ์ค์นํ์ง ๋ง์ญ์์ค.
์, ์ข์ต๋๋ค. ๋ก์ปฌ ํ์ผ์ ๊ฒฝ์ฐ ์๋นํ ์ ์ ํฉ๋๋ค. ์๊ฒฉ ํ์ผ์ด ์๋๋๋ค! ;-)
ํ์ง๋ง ์ด๊ฒ์ ๋ฐฉ๋ฒ์ด ์๋๋๋ค... ์ค์น๋ ์ฝ๋ฐฑ(*.user.js์์ ํธ๋ฆฌ๊ฑฐ)์ ๋๋ค...
์ธ๊ธํ๋ฏ์ด ํ์ผ ์ ๋ ฅ์ ์ฌ์ฉํ ์๋ ๊ฐ์ ธ์ค๊ธฐ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค.
๋ค, ์๊ฒ ์ต๋๋ค. ๋ก์ปฌ ํ์ผ์ ๊ฒฝ์ฐ ๊ด์ฐฎ์ต๋๋ค(์ ์ฐธ์กฐ)...
.user.js๋ฅผ Greasemonkey ์ฐฝ์ ๋์ด๋ค ๋์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ก๋ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๊ฒ์ ํ์คํ Firefox ์์ฒด์์ ์๋ํ๊ธฐ ๋๋ฌธ์(์ฆ, imgur์ ๊ฐ์ ์น์ฌ์ดํธ์ ํ์ผ์ ์
๋ก๋ํ๊ฑฐ๋ ํ์ผ์ ์ญ์ ํ์ฌ ๋ฉ๊ฐ์
๋ก๋ํ ์ ์์)
๋ก์ปฌ GM ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฐฉ๋ฒ(์ํฌ๋ฅธ ๋๋๊ทธ ์ค ๋๋กญ์ด ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ๋ฅ)์ด ์์ต๋๊น?
์คํฌ๋ฆฝํธ๋ ์ ํํ ์ด๋ "์บ์" ๋๋ ํ ๋ฆฌ์ ์ต์ข ์ ์ผ๋ก ๋ฐฐ์น๋์ด์ผ ํฉ๋๊น? Firefox ํ๋กํ์์ ์ฌ๋ฌ "์บ์" ํ์ผ์ ์ฐพ์์ต๋๋ค.
.user.js๋ฅผ Greasemonkey ์ฐฝ์ ๋์ด๋ค ๋์ ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ก๋ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ค๋ฅธ ๋๋กญ๋ฐ์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ฅํฉ๋๋ค(์๋ฅผ ๋ค์ด ๋ด IMGoolge๋ฅผ ํ์ธํ์ญ์์ค). ๊ทธ๋ฌ๋ ์ง์ ์ ์ธ ํ์ผ ์ ๋ ฅ์ ์ถ๊ฐ์ ์ธ ๋ฆฌ์ค๋์ ํ๋ก์ธ์ค๊ฐ ํ์ ์๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์ ๋๋ค.
Mozilla๋ ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธํ์ต๋๋ค(์์ ์ ์์ฝ).
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Working_with_files
- ํ์ผ ์ ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅ์์ ํ์ผ ์ด๊ธฐ
- ๋์ด์ ๋๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅ์์์ ํ์ผ ์ด๊ธฐ
์ด๋ฅผ ๊ตฌํํ๋ฉด GM3์์์ ๋์ผํ ๋์์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ ์ ํ ์จ๋ผ์ธ ํ์์ผ๋ก ์ ๊ณต๋์ง ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ์๋์ผ๋ก ์ค์นํ๊ธฐ ์ํ ์ ์ ์ฌํญ์ด ์์ต๋๊น?
@Samizdata ํ์ฌ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ GM ๋ฒ ํ(https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/versions/beta)๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์์ญ์ด ๋ฉ๋ด๋ฅผ ์ด๊ณ --> ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค.
@require ๋ก์ปฌ ํ์ผ์ด ์๋ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ ค์ด ๋ฐฉ๋ฒ์ผ๋ก๋ง ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Proxomitron( http://www.proxomitron.info/files/ )์ ์ก๊ณ ์คํํ๊ณ ํ๋ก์ 127.0.0.1:8080์ ์ฌ์ฉํ๋๋ก FF๋ฅผ ๊ตฌ์ฑํ๊ณ ํ์ผ์ Proxomitron HTML ํด๋์ ๋ฃ๊ณ ๋์ค์ " http: //bweb..local.ptron/YOURFILE.user.js ".
@kekkc , ์๊ฒฉ ๋ฆฌ์์ค ๋ฌธ์ ๊ฐ ์์ ๋ ์ ๋ฒ์ ์ด AMO์ ํธ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฑด๋ฐฐ. ์๋ฃ๋์์ต๋๋ค, @kekkc !
@kekkc , ์๊ฒฉ ๋ฆฌ์์ค ๋ฌธ์ ๊ฐ ์์ ๋ ์ ๋ฒ์ ์ด AMO์ ํธ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ง.. ๋ด๊ฐ ๋ณผ ์ ์๋ ํ
@Sxderp #2707์
@Eselce ๋ค. '์ ์คํฌ๋ฆฝํธ' ๋ฒํผ์ ์ฌ์ฉํ์ฌ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ๋ค์ ์คํฌ๋ฆฝํธ์ @require
ํ๊ทธ๋ฅผ ์ ์ฉํ ๋ ์กด์ฌํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ _ํด์ผ_ ํฉ๋๋ค.
.user.js
๋๋ ํ์ํ ์คํฌ๋ฆฝํธ๊ฐ ๋ก์ปฌ์์ ์ ๊ณต๋๋๋ก ํ๋ ค๋ฉด ๋ค์ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ช
๋ น์ค์์ ์ด Python ํ ์ค์ง๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
ํ์ด์ฌ 2.x์ ๊ฒฝ์ฐ:
python -m SimpleHTTPServer
ํ์ด์ฌ 3.x์ ๊ฒฝ์ฐ:
python -m http.server
... http://127.0.0.1:8000/
์์ ์คํํ ๋๋ ํ ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ์ฆ์ ์ ๊ณตํ๊ธฐ ์์ํฉ๋๋ค.
(_8000์ ๊ธฐ๋ณธ ํฌํธ์ ๋๋ค. ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์๋ ์ฐธ์กฐ_)
์ด๊ฒ์ด ๋ด๊ฐ ๋ก์ปฌ .user.js
๋ฅผ ๋ฃ๊ณ ๋ก์ปฌ http ์๋ฒ์ ํ์ผ์ ์๊ตฌํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ ๋ Greasemonkey๋ฟ๋ง ์๋๋ผ Tampermonkey์๋ ์ด ์์
์ ์ํํฉ๋๋ค.
Python์ Linux ๋ฐ MacO์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋ฉ๋๋ค. Windows๋ฅผ ์ฌ์ฉ ์ค์ด๊ณ ์ค์นํ์ง ์๊ณ ๊ณ์ ์์ ์ ๊ฐ๋ฐ์๋ผ๊ณ ๋ถ๋ฅผ ๊ณํ์ด๋ผ๋ฉด... _์ง์ฌ์ผ๋ก?! ๋ฌด์จ ์ผ์ด์ผ?_ ๋น์ ์ด ๊นจ๋ซ๊ธฐ ์์ํ ์ ์๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค! ์ ์ ๊ฐ๊พธ๊ธฐ :๋ฌ๋ชฉ: ์ปดํจํฐ๊ฐ ์๋ ์ทจ๋ฏธ๋ก ๋จ๊ฐ์ง์ ํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค :wink: (_์ด๋ด, ๋๋ด์ด์ผ!_)
์ด์ํ ํ๋ก๊ทธ๋จ์ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค. _ ํ ์๋ _ ์์ง๋ง ๊ทธ๊ฒ์ _์ ๋์ ์ผ๋ก ํ์ํ์ง ์์ต๋๋ค_. Python์ "์ฑ"์ด ์๋๋ผ ๊ธฐ๋ณธ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์๋ฃจ์ ์ ์ํด Python์ "๋งํ " ํ์๋ ์์ผ๋ฏ๋ก ์์ง ๋จ๊ฐ์ง ๋๊ตฌ๋ฅผ ์ข ๋ฃํ๊ฑฐ๋ ์๋๋ฅด์ง ๋ง์ญ์์ค!
cd
.user.js
๋ฐ/๋๋ ํ์ ํ์ผ์ด ํฌํจ๋ ๋๋ ํ ๋ฆฌ์ cd
๋ฃ์ต๋๋ค. ์๋ฅผ ๋ค์ด requiredFile1.js
๋ฐ requiredFile2.js
ํด๋น ๋๋ ํ ๋ฆฌ์์: Python 2.x์ ๊ฒฝ์ฐ ๋ค์์ ์คํํฉ๋๋ค.
python -m SimpleHTTPServer
๋๋: Python 3.x์ ๊ฒฝ์ฐ ์คํ
python -m http.server
@require
ํ์ด ๋ค์๊ณผ ๊ฐ์์ง ํ์ธํ์ญ์์ค.// <strong i="42">@require</strong> http://127.0.0.1:8000/requiredFile1.js
// <strong i="43">@require</strong> http://127.0.0.1:8000/requiredFile2.js
...์ฌ๊ธฐ์ requiredFile1.js
๋ฐ requiredFile2.js
๋ ์ ๊ณตํ๋ ค๋ ํ์ ๋ก์ปฌ ํ์ผ์
๋๋ค.
์๋ฃ.
๋ก์ปฌ ์๋ฒ๋ฅผ ๋ซ์ผ๋ ค๋ฉด python ๋ช
๋ น์ ์คํํ๋ ์ฝ์๋ก ์ด๋ํ์ฌ <Ctrl><C>
๋๋ฅด์ญ์์ค.
๋ํ -_-๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๋น์ ์๊ฒ ํฐ๋ฌด๋์์ด ๋ช ๋ฐฑํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค_--, Greasemonkey ๋๋ Tampermonkey๊ฐ ํ์ผ์ ์ฐพ์ ์ ์์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๊ธฐ ์ ์ Python HTTP ์๋ฒ ๋ช ๋ น์ค์ ์คํํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค...
ํ : ๊ธฐ๋ณธ 8000
์ด์ธ์ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ช
๋ น์ ์ํ๋ ๋ฒํธ(์ ํจํ ํฌํธ ๋ฒํธ)๋ฅผ ์
๋ ฅํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
ํ์ด์ฌ 2.x์ ๊ฒฝ์ฐ:
python -m SimpleHTTPServer 12345
ํ์ด์ฌ 3.x์ ๊ฒฝ์ฐ:
python -m http.server 12345
...์์ฐ์ค๋ฝ๊ฒ @require
URL์ 8000 ๋์ ํด๋น ๋ฒํธ๋ก ์
๋ฐ์ดํธํฉ๋๋ค.
์ข์, GM ๋๊ตฌ ๋ชจ์ ์์ด์ฝ์ ํด๋ฆญํ๊ณ "์ ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ..."๋ฅผ ์ ํํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ ํด๋น ํญ์ ์ด๋ฆ์ "์ด๋ฆ ์๋ ์คํฌ๋ฆฝํธ 821696"์ผ๋ก ์๋ ์ง์ ๋ฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ก์ปฌ ํ์ผ GM ์ฝ๋์์ ํญ ์ฐฝ์ ๋ถ์ฌ๋ฃ๊ณ ์ผ์ชฝ ์๋จ์ ์๋ "์ ์ฅ" ์์ด์ฝ์ ํด๋ฆญํฉ๋๋ค.
๋์ค์ ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋์์ ์ฐพ์ ์ ์์ต๋๊น? ์ฝ๊ธฐ: ๋์ค์ ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ด๋ป๊ฒ ํธ์งํ ์ ์์ต๋๊น?
์คํฌ๋ฆฝํธ ์ด๋ฆ์ "foobar"์ ๊ฐ์ด ์ด๋ป๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๊น?
@bsto ์ด๋ฆ์ ์คํฌ๋ฆฝํธ @name์์ ๊ฐ์ ธ์ต๋๋ค.
๋ชจ๋ ์ ์คํฌ๋ฆฝํธ๋ "์ ์ฌ์ฉ์ ์คํฌ๋ฆฝํธ..." ์์ ๋ํ๋ฉ๋๋ค.
์คํฌ๋ฆฝํธ์ ์ ๋ชฉ์ ํด๋ฆญํ์ฌ ์ ๊ฑฐํ๊ฑฐ๋ ํธ์งํ๋ ค๋ฉด ํ์ ๋ฉ๋ด๊ฐ ์์ต๋๋ค.
์๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
๋ ๋ค๋ฅธ ์ง๋ฌธ:
11์ 25์ผ ์ฌ์ฉ์ kekkc๋ ์์ ์ ๊ฒ์๋ฌผ(์ ์ฐธ์กฐ)์์ Mozilla๊ฐ ํ์ผ์ ๋์ด๋ค ๋๋ ๋ฐฉ๋ฒ(WinExplorer์์)์ ์ ๊ณตํ๋ค๊ณ ๋งํ์ต๋๋ค.
๋ฐ๋ผ์ ์ด์ ์ฌ์ฉ์ ํ์ผ์ ๋๋๊ทธ ์ค ๋๋กญ์ด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
๋ด ๋ง์ด ๋ง์?
GM์์๋ ์ธ์ ๊ตฌํ๋๋์(*.user.js ํ์ผ์ ๋๋๊ทธ ์ค ๋๋กญ ๊ฐ๋ฅ)?
FWIW ์ ์๊ฐ์๋ file://.../anything.user.js
์ ๋ํ ํ์์ ๊ฐ์งํ ์/ํด์ผ ํ๋ค๊ณ ์๊ฐํ๊ณ ์๋ํ ์ ์๋ ๋ชจ๋ ์ข
๋ฅ์ ํ์ผ ๋ธ๋ผ์ฐ์ ๋ก UI๋ฅผ ์ด ์ ์๋ ํ์ด์ง ์์
์ ์ฒจ๋ถํด์ผ ํฉ๋๋ค.
ํ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ ์ ์์ง๋ง ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค(์ฝํ ์ธ ์คํฌ๋ฆฝํธ์ ์์ ์ ์์).
ํ์ผ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ธฐ ์ํด file://
๋ก ์ด๋ํ๋ ๊ฒ์ ์ด๋ฆฌ์์ ์ผ์ด์ง๋ง(ํ์ผ ์ ํ๊ธฐ ์
๋ ฅ ์ธ์๋ ์๋ฌด ๊ฒ๋ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค).
ํ์ผ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ธฐ ์ํด file://๋ก ์ด๋ํ๋ ๊ฒ์ ์ด๋ฆฌ์์ ์ผ์ด์ง๋ง(ํ์ผ ์ ํ๊ธฐ ์ ๋ ฅ ์ธ์๋ ์๋ฌด ๊ฒ๋ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค).
๊ทธ๋ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ์คํธ๋ง ์ํ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ์ ํ๋ ํ๊ฒฝ ๋ด์์ ์๋๋ฅผ ๊ฐ์งํ๊ณ ๊ฐ๋ฅํ ํ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ด 2์ผํธ...
FWIW ์ฐ๋ฆฌ๊ฐ file://.../anything.user.js์ ๋ํ ํ์์ ๊ฐ์งํ ์ ํฉ๋๋ค.
ํ์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ ์ ์์ง๋ง ์ฝํ ์ธ ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค(์ฝํ ์ธ ์คํฌ๋ฆฝํธ์ ์์ ์ ์์).
Sxderp์์ ์ธ๊ธํ๋ฏ์ด ๊ฐ๋ฅํ์ง๋ง ์ฝ๊ฐ ์ง์ ๋ถํฉ๋๋ค ...
tabs.onUpdated.addListener
์ ๊ฐ์ด)๋์ ....
๊ฐ์ธ์ ์ผ๋ก ์ ๋ผ๋ฉด ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ browserAction ํ์ ์ IMPORT ์ต์ ์ ์ถ๊ฐํ๊ธฐ๋ก ํ์ต๋๋ค.
๋ํ, ์ด์จ๋ GM4 ์ดํ๋ก .user.js
ํ์์ ์ฌ์ฉํ์ง ์์์ผ๋ฏ๋ก ๋จ๊ฒจ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ;)
๊ฐ์ธ์ ์ผ๋ก ์ ๋ผ๋ฉด ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํ์ง ์๊ณ ๊ฐ๋จํ ..
์ด๊ฒ์ด ๋ด๊ฐ ์๋ฏธํ๋ ๋ฐ์ ๋๋ค. ํ์ง๋ง ์ฝํ ์ธ ํ์ด์ง์ UI๋ฅผ ์ฝ์ ํ ์๋ ์์ต๋๋ค. GM์ด ๋นํ์ฑํ๋ ์ํ์์ ์คํฌ๋ฆฝํธ๋ก ์ด๋ํ๋ฉด ์ ๋ณด ํ์์ค์ ํ์ํ๊ณค ํ์ต๋๋ค. ๊ทธ๋ฐ ๊ฒ.
๋ํ, ์ด์จ๋ GM4 ์ดํ๋ก .user.js ํ์์ ์ฌ์ฉํ์ง ์์์ผ๋ฏ๋ก ๋จ๊ฒจ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ;)
์ด๊ฒ์ ๋ฌด์์ ์๋ฏธ ํ๋๊ฐ?
์ด๊ฒ์ ๋ฌด์์ ์๋ฏธ ํ๋๊ฐ?
GM3์์๋ ์คํฌ๋ฆฝํธ ์ด๋ฆ์ abc.user.js
์ง์ ํด์ผ GM ์คํฌ๋ฆฝํธ๋ก ์ธ์ํ ์ ์์์ต๋๋ค.
GM4์์ ์คํฌ๋ฆฝํธ๋ IndexedDB์ ์ ์ฅ๋๋ฉฐ ์คํฌ๋ฆฝํธ ์ด๋ฆ์ @name
์์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ค์ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ๋ ์คํฌ๋ฆฝํธ(์ปดํจํฐ์์)๋ฅผ abc.js
( .user
์ ์ธ)๋ก ๋ง๋ค๊ณ ์ ์ฅํ๊ณ GM์ ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํ์ต๋๋ค.
์๋ IMPORT๋ .user
๋ช
๋ช
ํ์์ ๋ฌถ์ผ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด์ ๋ํ ์ง์ ์ด ์์ต๋๊น?
ํ์ด์ด๋ชฝํค ์ต์คํ ์ ์ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค: