Greasemonkey: ๋กœ์ปฌ ํŒŒ์ผ ์„ค์น˜ ํ—ˆ์šฉ

์— ๋งŒ๋“  2017๋…„ 10์›” 12์ผ  ยท  44์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: greasemonkey/greasemonkey

๊ณผ๊ฑฐ์—๋Š” ํŒŒ์ผ> .user.js ์—ด ์ˆ˜ ์žˆ์—ˆ๊ณ  ์„ค์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ 4.0์—์„œ๋Š” ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ๋งŒ ์—ฝ๋‹ˆ๋‹ค.

๋ชจ๋“  44 ๋Œ“๊ธ€

์•„๋งˆ๋„ ์ด๊ฒƒ์€ (ํŒจํ„ด ๋ฌธ์„œ ์ผ์น˜)? ๊ตฌ์„ฑํ‘œ์— ๋Œ€ํ•œ ์ผ์น˜ ์„ ํƒ๊ธฐ ์—์„œ * ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 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

  1. ํŒŒ์ผ ์„ ํƒ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅ์ž์˜ ํŒŒ์ผ ์—ด๊ธฐ
  2. ๋Œ์–ด์„œ ๋†“๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅ์ž์—์„œ ํŒŒ์ผ ์—ด๊ธฐ

์ด๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด 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์„ "๋งํ• " ํ•„์š”๋„ ์—†์œผ๋ฏ€๋กœ ์•„์ง ๋œจ๊ฐœ์งˆ ๋„๊ตฌ๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์„œ๋‘๋ฅด์ง€ ๋งˆ์‹ญ์‹œ์˜ค!

๊ฐ„๋‹จํ•œ ์ ˆ์ฐจ:

  1. cd .user.js ๋ฐ/๋˜๋Š” ํ•„์ˆ˜ ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ† ๋ฆฌ์— cd ๋„ฃ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด requiredFile1.js ๋ฐ requiredFile2.js

  2. ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์—์„œ: Python 2.x์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

python -m SimpleHTTPServer

๋˜๋Š”: Python 3.x์˜ ๊ฒฝ์šฐ ์‹คํ–‰

python -m http.server

  1. @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 ๋Š” ์ œ๊ณตํ•˜๋ ค๋Š” ํ•„์ˆ˜ ๋กœ์ปฌ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

  1. ๊ทธ๋ฆฌ์Šค๋ชฝํ‚ค ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๋ฉด Python์—์„œ ์ œ๊ณตํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์™„๋ฃŒ.

๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ๋‹ซ์œผ๋ ค๋ฉด 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 ์™€ ๊ฐ™์ด)
  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€ ๋กœ๋“œ ํ—ˆ์šฉ
  • ์ฝ˜ํ…์ธ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  bg ์Šคํฌ๋ฆฝํŠธ์— ์ „๋‹ฌ
  • ํŽ˜์ด์ง€/ํƒญ ๋‹ซ๊ธฐ

๋Œ€์•ˆ ....

  • ํƒ์ƒ‰ ์ˆ˜์‹ ๊ธฐ ์ถ”๊ฐ€
  • ํŽ˜์ด์ง€ ๋กœ๋“œ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ผ๋Š” ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค ... ๋˜๋Š” .... ์‚ฌ์šฉ์ž๊ฐ€ ํŒŒ์ผ ์„ ํƒ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ฆญํ•ด์•ผ ํ•˜๋Š” ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ต์…˜์„ ๋ณด์—ฌ์ฃผ๋Š” ํŒ์—…์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋ผ๋ฉด ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  browserAction ํŒ์—…์— IMPORT ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ์–ด์จŒ๋“  GM4 ์ดํ›„๋กœ .user.js ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‚จ๊ฒจ๋‘˜ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ;)

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋ผ๋ฉด ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํžˆ ..

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฝ˜ํ…์ธ  ํŽ˜์ด์ง€์— UI๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. GM์ด ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์—์„œ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ด๋™ํ•˜๋ฉด ์ •๋ณด ํ‘œ์‹œ์ค„์„ ํ‘œ์‹œํ•˜๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒƒ.

๋˜ํ•œ, ์–ด์จŒ๋“  GM4 ์ดํ›„๋กœ .user.js ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‚จ๊ฒจ๋‘˜ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ;)

์ด๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธ ํ•˜๋Š”๊ฐ€?

์ด๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธ ํ•˜๋Š”๊ฐ€?

GM3์—์„œ๋Š” ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„์„ abc.user.js ์ง€์ •ํ•ด์•ผ GM ์Šคํฌ๋ฆฝํŠธ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

GM4์—์„œ ์Šคํฌ๋ฆฝํŠธ๋Š” IndexedDB์— ์ €์žฅ๋˜๋ฉฐ ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„์€ @name ์—์„œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €๋Š” ์Šคํฌ๋ฆฝํŠธ(์ปดํ“จํ„ฐ์—์„œ)๋ฅผ abc.js ( .user ์ œ์™ธ)๋กœ ๋งŒ๋“ค๊ณ  ์ €์žฅํ•˜๊ณ  GM์— ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜๋™ IMPORT๋Š” .user ๋ช…๋ช… ํ˜•์‹์— ๋ฌถ์ผ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํŒŒ์ด์–ด๋ชฝํ‚ค ์ต์Šคํ…์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

https://addons.mozilla.org/en-US/firefox/addon/firemonkey/

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰