이번에는 이전
"Firefox 확장에서 New Tab POST/Referrer 제어"에 이어 New Window로 POST data제어와 Refferer를 제어하는 방법에 대해서 논하도록 하겠습니다.
보통 javascript 에서 새 창을 띄울 경우
windows.open을 사용합니다. Firefox extension에서도 마찬 가지 입니다. 하지만
windows.open을 이용할 경우, referrer를 제어할 수가 없습니다. 또한 Post data를 제어를 하려면 상당히 귀찮습니다. --; Post data를 제어하는 예제를 보시죠.
window.open으로 새 창으로 열기
var page = window.open (
'about:blank', 'winID',
'fullscreen=no' +
'resizable=yes' +
'toolbar=no' +
'menubar=no' +
'width=600' +
'height=400' +
'localtion=no'
);
var doc = page.content.document;
var formElement = doc.createElement ('form')
formElement.setAttribute ('method', (method == 'POST') ? 'post' : 'get');
formElement.setAttribute ('action', url);
formElement.setAttribute ('style', 'display: none;');
var firstElement = doc.createElement ('input');
firstElement.setAttribute ('name', 'first');
firstElement.setAttribute ('name', first_value);
formElement.appendChild (firstElement);
var secondElement = doc.createElement ('textarea');
secondElement.setAttribute ('name', 'second');
secondElement.value = second_value;
formElement.appendChild (secondElement);
doc.body.appendChild (formElement);
form.Element.submit ();
이 코드는 javascript 에서도 아마 사용이 가능 할 겁니다. 하지만, 얼마나 괴로울까요? 일단
about:blank로 새 창을 열고, 이 창에 DOM을 이용해서 form을 생성 시켜서 데이터를 post 또는 get으로 제어를 해야 합니다.
Translate To Korean 재작성을 하면서 Post 데이터를 처리하기 위해서 열라 검색을 해서 이런 코드를 만들었는데, referrer 처리도 안되고 openNewTabWith 와 object 호환도 안되서 코드가 난장 직전까지 가다 보니, 도저히 이렇게 사용을 할 수는 없겠더군요. 그래서 역시 Firefox source를 또 뒤져 보았습니다.
역시나,
openNewTabWith API 아래에
openNewWindowWith라는 API가 존재를 하는 군요.
openNewTabWith API 처럼 Post와 referrer를 모두 제어할 수 있도록 되어 있습니다. 그런데 문제는 창 속성을 지정을 할 수 있는 인자가 없습니다. 즉 무조건 새창을 현재창 크기로 띄워야만 하는 군요. 그래서 API 코드를 열어서 어떻게 사용하는지를 확인해 보았고 다음과 같은 코드를 만들어 낼 수 있었습니다.
Firefox API로 새 창으로 열기
var url = 'http://some.domain.com/action';
var referer = 'http://some.doamin.com';
var post = 'first=1&second=' + encodeURIComponent (somtext);
if ( method == 'Get' ) {
url += '?' + post;
post = null;
} else {
post = getPostStream (post, null, null, 'application/x-www-form-urlencode');
}
var page = window.openDialog (
'chrome://browser/contetn/',
'winID',
'fullscreen=no' +
'resizable=yes' +
'toolbar=no' +
'menubar=no' +
'width=600' +
'height=400' +
'localtion=no',
url,
'UTF-8',
makeURI (referer),
post,
false;
);