Greasemonkey: ์—ด๋ฆฐ ํƒญ์— ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

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

์ด์ œ GM_openInTab์ด ๋” ์ด์ƒ ์ฐฝ ๊ฐœ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฐฝ์„ ์—ฌ๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฐฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด๋‹น ํƒญ์— ๋Œ€ํ•ด ์ง€์ •๋œ ํƒญ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

https://github.com/greasemonkey/greasemonkey/issues/2134 ๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
(์ปจํ…์ŠคํŠธ์—๋งŒ ์‚ฌ์šฉ)

์ด๋Š” ๋‹จ์ˆœํžˆ GM_openInTab์ด null์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์ง€๋งŒ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฐธ์กฐํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ URL์— ์•ต์ปค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ด๋‹น ์•ต์ปค๋ฅผ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์„ธ์Šค๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ํฐ ํŽ˜์ด๋กœ๋“œ์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ์•ต์ปค๋ฅผ ID๋กœ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ์ฑ„๋„ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํƒญ์ด ์„œ๋กœ ํ†ต์‹ ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›น ์ฝ˜ํ…์ธ ๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ํ†ต์‹  ์ฑ„๋„์„ ๋“ฃ๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฐ”๋กœ ๊ทธ ์ด์œ ๋กœ ์•ต์ปค๋ฅผ ํ”ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

GM_info.uuid ๋ ˆ์ด๋ธ” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ฑ„๋„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์Šคํฌ๋ฆฝํŠธ+์ปดํ“จํ„ฐ+ํ”„๋กœํ•„์— ๊ณ ์œ ํ•œ ์Šคํฌ๋ฆฝํŠธ UUID๋กœ ์ถฉ๋ถ„ํžˆ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.
์ถ”์‹ : ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ธ”๋ก์—์„œ // <strong i="8">@grant</strong> GM_info ๋ฅผ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ƒˆ ํŽ˜์ด์ง€์—์„œ ์‹คํ–‰๋˜๋Š” ๋™์ผํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

@Sasstraliss "์„œ๋กœ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ๊ฐ„์˜ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ฒƒ"์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ์˜ UUID๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์œผ๋ฉฐ ๋™์ผํ•œ UUID๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ reddit์—์„œ ๋ฐฐ์šด ํŠธ๋ฆญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์— ๊ด€ํ•œ ํ•œ ์ƒ๋‹นํ•œ ์–‘์˜ ์˜์‚ฌ ์ฝ”๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ์ฐฝ๊ณผ ๋ถ€๋ชจ ์ฐฝ์ด ์‚ฌ์ดํŠธ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๋Š” ...

var stringData;

var awakener = window.opener || window.parent;
if(awakener && awakener != window)
{
    //Used when a page is launched from a link so that passData can...well...pass data. But we can't use onload from there so instead we're using postMessage here to convey to the "parent" window that this window is ready to recieve data
    awakener.postMessage("Loaded","*");
}

window.addEventListener("message", messageDetected, false);

clickableThing.onclick = function() {
    var newWindow = window.open(this.href,this.target);
    passData(window,newWindow,dataToPass);
    return false;
};

function messageDetected(event)
{
    if(typeof(event.data) == "string" && event.data != "Loaded")
    {
        stringData = event.data;
    }
}

function passData(mainWindow,target,data)
{
    mainWindow.addEventListener("message", passItOn, false);
    function passItOn(event)
    {
        if(event.source == target) target.postMessage(data,"*");
    }
}

@DoomTay , ์†Œ์Šค ํ˜•์‹์„ ์œ ์ง€ํ•˜๋ ค๋ฉด 3์ค‘ ์—ญ๋”ฐ์˜ดํ‘œ ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

@ the8472 ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ์†ก ์ฑ„๋„ ์‚ฌ์šฉ

์•„์•„, ์ด๊ฒƒ์€ Fx38+์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ—˜์ ์ธ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๋” ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์€ localStorage API ๋ฐ ์Šคํ† ๋ฆฌ์ง€ ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. http://stackoverflow.com/questions/2236828/javascript-communication-between-tabs-windows-with-same-origin/12514384#12514384 ์ฐธ์กฐ

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