출처 : PHPSCHOOL
원본링크 : http://phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=19723
전 즐겨찾기 보다는 링크를 더 애용하는 편입니다.
즐겨찾기를 하려면 여러번 클릭해야 하는데 자주 가는 사이트들은
그냥 툴바처럼 누르는게 편할테니까요... (즐겨찾기를 왼편에 둘수도 있지만
이것은 너무 자리를 많이 찾이 해서리..)
뭐 여기까지는 팁이랄 것도 없는데
이 링크에 주소만 들어 가는게 아니라
javascript:alert(document.cookie) 이런식으로
자바 스크립도 등록이 된다는 것입니다.
이게 된다는 것을 알고 나서는 주욱 한줄로 스크립트를 만들어서
이미지 리스트라던지 기타 개발에 편리한 디버깅 스크립트를 간단하게
만들어서 사용했는데, 문득 다른 아이디어가 떠올랐죠...
이름하여 자동 폼 완성기 ^^
제가 문자를 보내기를 하는 곳이 삼성카드인데,
여기는 900원만 내면 하루에 100건씩 해서 한달에 최대 3000건의
문자를 보낼 수 있는 사이트 입니다.
하지만 제공되는 인터페이스가 주소록은 최대 10개만 등록이 되고
100건을 보낼수 있다지만 동보로 몇십명에게 뿌릴려면
여간 불편한게 아니더군요..
javascript:var sendmsg = '아아!! 씨씨 엠티갑니다. ';
var aaa=document.frames[0].document.frames[2].document.frames[1].document.forms[0];
var plist = new Array('011xxxxxx','핸폰번호1','핸폰번호2','핸폰번호3');
var prev_num = aaa.mobile_phone[0].value;
for(i=0; i<plist.length; i++) { if (plist[i] == prev_num) {alert(i); break;} }
이런 스크립트를 한줄로 주욱 적어서 자동으로 전화번호를 입력하려는
시도를 했습니다. 그런데 왠걸... 단축아이콘에서 url파라메터로 넘길수 있는것은
약 500자 까지만 되더군요.. 500자로는 전화번호 리스트와 그 폼에 데이터를
전송하는 코드를 작성할수 가 없겠더군요..
(뭐 그냥 폼으로 전송하면 되지 않느냐는 분도 있겠지만
삼성카드 사이트는 제큐어웹이라는 솔류션을 사용해서 폼자체를
암호화 해서 전송해서 폼으로 데이터를 던진다 해도 효과가 없습니다.)
그래서 아.. 안타가운 아이디어구나 하면서 말았는데
문득 오늘 출근하면서 해법이 풀려버렸습니다.
javascript:var aaa=document.frames[0].document.frames[2].document.frames[1].document;
aaa.write('<script src=http://특정사이트/autonum.js>');
이런식으로 스크립트를 링크하는 내용으 넣으면 되지 않겠냐는 거죠
그런데 테스트를 해보니 이미html이 완성된 상태에서
write를 하니 백지 html이 되어 버리더군요
다시 생각을 하면서 html객체 레퍼런스를 보면서 좀더 생각을 해보니..
javascript:var aaa=document.frames[0].document.frames[2].document.frames[1].document;
aaa.body.insertBefore(aaa.createElement('<script src=http://특정사이트/autonum.js>')); alert('');
빙고! 원하는 바를 얻은 것이죠...
저것이 되는 것을 확인을 하고 url에 적을려던 코드를 아에
특정사이트에 js파일로 올려서 원하는 바를 얻을수 있습니다.
아울러 js파일을 php로 생성하면 바로 db에서 목록을 뽑아서
더 동적으로 메시지를 보낼 환경을 만들게 된것이죠..
---------------------------------------------------------------------------------
<?
// 만든이 배성남
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$sql = " SELECT
user_realname,
user_ordinalnum,
replace(user_phone1,'-','') as mobile_phone
FROM phpbb_users
WHERE user_phone1 <> '--'
and user_phone1 <> ''
and length(user_phone1) >= 12
ORDER BY user_ordinalnum, user_realname " ;
// 전화번호부 배열을 만들어 준다.
echo "var plist = new Array( \n" ;
if ( ($result = $db->sql_query($sql) ) )
{
for ($i = 0 ; $row = $db->sql_fetchrow($result) ; $i++)
{
echo " Array('" . $row['0'] . "', " . $row['1'] . ",'" . $row['2'] . "'),\n";
}
}
echo " Array('NULL',0,'') ); \n";
?>
var myMessage = '야호~~ 엠티 가는날이어라.. 날씨 좋습니다.~!!';
var myForm = document.forms[0];
var prev_num = myForm.mobile_phone[0].value;
// 메시지를 셋팅한다.
//myForm.sendWin.value = myMessage;
(myForm.elements(3)).value = myMessage;
for(i=0 ; i < plist.length ; i++) {
// 이전에 보낸 마지막 번호와 같은 것을 리스트에서 찾는다.
if(prev_num == plist[i][2]) {
// alert(plist[i][0] + "/" + plist[i][1] + "/" + plist[i][2] + "/" );
i++;
break;
}
}
if(i == plist.length) i = 0; // 찾은게 없으면 처음부터 간다.
// 전화번호를 5개 폼으로 전송한다.
for(j=0; j < 5 && i < plist.length - 1; j++, i++) {
myForm.mobile_phone[j].value = plist[i][2];
//alert(plist[i][2]);
}
CheckMsgLen(); // 작업이 완료되면, 삼성카드에 메시지 길이 체크 함수를 호출해준다.
---------------------------------------------------------------------------------
위의 php파일 실제로 만들어 내는 js파일은
var plist = new Array(
Array('휘', 2,'0176XXXX07'),
Array('민', 2,'0119XXXX267'),
Array('창', 3,'0169XXXX159'),
Array('아', 4,'0119XXXX678'),
Array('주', 6,'0169XXXX443'),
Array('세', 6,'0167XXXX32'),
Array('영', 6,'0169XXXX127'),
Array('주', 6,'0115XXXX65'),
Array('병', 6,'0184XXXX56'),
Array('재', 6,'0119XXXX787'),
Array('형', 6,'0162XXXX94'),
Array('창', 6,'0163XXXX90'),
Array('광', 6,'0115XXXX12'),
Array('종', 7,'0119XXXX203'),
Array('준', 7,'0163XXXX36'),
Array('우신', 7,'01XXXX53643'),
Array('종', 10,'011XXXX0061'),
Array('장', 10,'011XXXX8403'),
Array('일', 10,'01954XXXX8'),
Array('NULL',0,'') );
var myMessage = '야호~~ 엠티 가는날이어라.. 날씨 좋습니다.~!!';
var myForm = document.forms[0];
var prev_num = myForm.mobile_phone[0].value;
// 메시지를 셋팅한다.
//myForm.sendWin.value = myMessage;
(myForm.elements(3)).value = myMessage;
for(i=0 ; i < plist.length ; i++) {
// 이전에 보낸 마지막 번호와 같은 것을 리스트에서 찾는다.
if(prev_num == plist[i][2]) {
// alert(plist[i][0] + "/" + plist[i][1] + "/" + plist[i][2] + "/" );
i++;
break;
}
}
if(i == plist.length) i = 0; // 찾은게 없으면 처음부터 간다.
// 전화번호를 5개 폼으로 전송한다.
for(j=0; j < 5 && i < plist.length - 1; j++, i++) {
myForm.mobile_phone[j].value = plist[i][2];
//alert(plist[i][2]);
}
CheckMsgLen(); // 작업이 완료되면, 삼성카드에 메시지 길이 체크 함수를 호출해준다.
-------------------------------------------------
클릭 한방에 편리하게 폼을 완성해서 보낼수 있게됩니다.
뒷부분에 confirm 를 추가해서 바로 myForm.submit까지 하면 더욱 편리하겠죠.
응용될 곳이 많습니다. ㅋㅋ
|
|