개발자의 금승훈의 지식베이스 입니다.

##특이사항
firefox의 경우, 보안설정을 수정해야하므로, 불가

호출 : onmouseover="if(event.ctrlKey==1 && !window.netscape) copyToClipboard('링크')";


//Clipboard 저장기능
 function copyToClipboard(In_txt, In_title)
 {
   document.body.focus();
   if(window.clipboardData)
   {
    var clipInput, clipContainer;
    clipInput = document.createElement("textarea");
    clipInput.style.width = "0px";
    clipInput.style.height = "0px";
    clipInput.style.borderStyle = "none";
    clipContainer = document.createElement("div");
    clipContainer.style.position = "absolute";
    clipContainer.style.width = "0px";
    clipContainer.style.height = "0px";
    clipContainer.style.display = "none";
    clipContainer.style.zIndex = "-100";
    clipContainer.appendChild(clipInput);
    document.body.appendChild(clipContainer);
    clipInput.value = In_txt;
    clipContainer.style.display = "";
    clipInput.focus();
    clipInput.select();
   }
   else if(navigator.userAgent.indexOf("Safari") != -1)
   { 
    var clipFrame = document.getElementById("clipboardFrame");
    if (!clipFrame)
    {
     clipFrame = document.createElement("iframe");
     clipFrame.id = "clipboardFrame";
     clipFrame.style.display = "none";
     document.body.appendChild(clipFrame);

     var clipDoc = clipFrame.contentDocument;
     clipDoc.body.innerHTML = "<textarea id='clipContainer'/>";
     clipDoc.designMode = "On";
     clipDoc.body.contentEditable = true;
    }
    var clipDoc = clipFrame.contentDocument;
    var container = clipDoc.getElementById("clipContainer");
    container.value = In_txt;
    container.focus();
    container.select();
    //clipDoc.execCommand("copy", false, "");
    //clipFrame.style.display = "none";
   }
//   else if (window.netscape) //firefox 사용 불가
//   {
//    try {
//     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
//    } catch (e) {
//     alert("Permission to read file was denied.");
//    }
//    var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
//    if (!clip) return;
//    var trans =Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
//    if (!trans) return;
//    trans.addDataFlavor('text/unicode');
//    var str = new Object();
//    var len = new Object();
//    var str =Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
//    var copytext = In_txt;
//    str.data = copytext;
//    trans.setTransferData("text/unicode",str,copytext.length*2);
//    var clipid = Components.interfaces.nsIClipboard;
//    if (!clip) return false;
//    clip.setData(trans,null,clipid.kGlobalClipboard);
//   }
 }

Comment +0

예) 링크#test

<html>
<head>
<script>
 function AnchorPosition(ei)
 {
  var ot=ei.offsetTop,dot=document.body.scrollTop;
  while((ei=ei.offsetParent) != null) { ot += ei.offsetTop; }
  document.body.scrollTop=ot-dot;
 }
</script>
</head>
<body onload=AnchorPosition(test)>
<a name=test></a>
</body>
</html>



원본 소스

// ===================================================================
// Author: Matt Kruse <matt@mattkruse.com>
// WWW: http://www.mattkruse.com/
//
// NOTICE: You may use this code for any purpose, commercial or
// private, without any further permission from the author. You may
// remove this notice from your final code if you wish, however it is
// appreciated by the author if at least my web site address is kept.
//
// You may *NOT* re-distribute this code in any way except through its
// use. That means, you can include it in your product, or your web
// site, or any other form where the code is actually being used. You
// may not put the plain javascript up on your site for download or
// include it in your javascript libraries for download.
// If you wish to share this code with others, please just point them
// to the URL instead.
// Please DO NOT link directly to my .js files from your site. Copy
// the files to your server and use them there. Thank you.
// ===================================================================

/*
AnchorPosition.js
Author: Matt Kruse
Last modified: 10/11/02

DESCRIPTION: These functions find the position of an <A> tag in a document,
so other elements can be positioned relative to it.

COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small
positioning errors - usually with Window positioning - occur on the
Macintosh platform.

FUNCTIONS:
getAnchorPosition(anchorname)
  Returns an Object() having .x and .y properties of the pixel coordinates
  of the upper-left corner of the anchor. Position is relative to the PAGE.

getAnchorWindowPosition(anchorname)
  Returns an Object() having .x and .y properties of the pixel coordinates
  of the upper-left corner of the anchor, relative to the WHOLE SCREEN.

NOTES:

1) For popping up separate browser windows, use getAnchorWindowPosition.
   Otherwise, use getAnchorPosition

2) Your anchor tag MUST contain both NAME and ID attributes which are the
   same. For example:
   <A NAME="test" ID="test"> </A>

3) There must be at least a space between <A> </A> for IE5.5 to see the
   anchor tag correctly. Do not do <A></A> with no space.
*/

// getAnchorPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the page.
function getAnchorPosition(anchorname) {
 // This function will return an Object with x and y properties
 var useWindow=false;
 var coordinates=new Object();
 var x=0,y=0;
 // Browser capability sniffing
 var use_gebi=false, use_css=false, use_layers=false;
 if (document.getElementById) { use_gebi=true; }
 else if (document.all) { use_css=true; }
 else if (document.layers) { use_layers=true; }
 // Logic to find position
  if (use_gebi && document.all) {
  x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
  y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
  }
 else if (use_gebi) {
  var o=document.getElementById(anchorname);
  x=AnchorPosition_getPageOffsetLeft(o);
  y=AnchorPosition_getPageOffsetTop(o);
  }
  else if (use_css) {
  x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
  y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
  }
 else if (use_layers) {
  var found=0;
  for (var i=0; i<document.anchors.length; i++) {
   if (document.anchors[i].name==anchorname) { found=1; break; }
   }
  if (found==0) {
   coordinates.x=0; coordinates.y=0; return coordinates;
   }
  x=document.anchors[i].x;
  y=document.anchors[i].y;
  }
 else {
  coordinates.x=0; coordinates.y=0; return coordinates;
  }
 coordinates.x=x;
 coordinates.y=y;
 return coordinates;
 }

// getAnchorWindowPosition(anchorname)
//   This function returns an object having .x and .y properties which are the coordinates
//   of the named anchor, relative to the window
function getAnchorWindowPosition(anchorname) {
 var coordinates=getAnchorPosition(anchorname);
 var x=0;
 var y=0;
 if (document.getElementById) {
  if (isNaN(window.screenX)) {
   x=coordinates.x-document.body.scrollLeft+window.screenLeft;
   y=coordinates.y-document.body.scrollTop+window.screenTop;
   }
  else {
   x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
   y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
   }
  }
 else if (document.all) {
  x=coordinates.x-document.body.scrollLeft+window.screenLeft;
  y=coordinates.y-document.body.scrollTop+window.screenTop;
  }
 else if (document.layers) {
  x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
  y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
  }
 coordinates.x=x;
 coordinates.y=y;
 return coordinates;
 }

// Functions for IE to get position of an object
function AnchorPosition_getPageOffsetLeft (el) {
 var ol=el.offsetLeft;
 while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
 return ol;
 }
function AnchorPosition_getWindowOffsetLeft (el) {
 return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
 } 
function AnchorPosition_getPageOffsetTop (el) {
 var ot=el.offsetTop;
 while((el=el.offsetParent) != null) { ot += el.offsetTop; }
 return ot;
 }
function AnchorPosition_getWindowOffsetTop (el) {
 return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
 }

Comment +0

//###float function float_math(string)
function float_math(val)
{
  var math_flag = new Array();
  var make_val="";
  for(var i=0; i<val.length; i++)
  {
   var temp_str=val.charAt(i);
   if(temp_str.search(/[\-||\+||\*||\/]/g)!=-1)
   {
    math_flag.push(temp_str);
    make_val=make_val.concat("^");
   }
   else make_val=make_val.concat(temp_str);
  }
  var temp_arr=make_val.split("^");
  for(var i=0;i<math_flag.length;i++)
  {
   var input_val=new Array();
   if(!result) var result=temp_arr[i];
   input_val.push(result.toString());
   input_val.push(temp_arr[i+1].toString());
   result=float_math_query(input_val, math_flag[i]);
  }
  return parseFloat(result);
 }
 
 function float_math_query(val_arr, math_flag) 
 {
  var val_arr_length=val_arr.length;
  var point_length = new Array();
  var point_max_length=-1;
  for(var j=0; j<val_arr_length;j++)
  {
   var val=val_arr[j];
   var point_temp=-1;
   var point=false;
   for(var i=0; i<val.length; i++)
   {
    var temp=val.charAt(i);
    if(temp.search(/[\\.]/g)!=-1) point=true;
    if(point==true) point_temp++;
   }
   if(point_max_length < point_temp)  point_max_length=point_temp;
   val_arr[j]=val_arr[j].replace(/[\\.]/g,"");
   if(val.length>1) val_arr[j]=val_arr[j].replace(/^[0]/g,"");
   point_length.push(point_temp);
  }

  var in_zero="";
  for(var i=0;i<point_max_length;i++) in_zero=in_zero.concat("0");
  var return_zero=in_zero;

  var return_math;
  for(var i=0;i<val_arr_length;i++)
  {
   var temp_zero;
   if(point_length[i]!=-1) temp_zero=in_zero.substring(point_length[i]);
   else temp_zero=in_zero;

   if(i==0) return_math=parseInt(val_arr[i].concat(temp_zero));
   else
   {
     if(math_flag=="+") return_math=return_math+parseInt(val_arr[i].concat(temp_zero));
     else if(math_flag=="-") return_math=return_math-parseInt(val_arr[i].concat(temp_zero));
     else if(math_flag=="*")
     {
      return_math=return_math*parseInt(val_arr[i].concat(temp_zero));
      return_zero=return_zero.concat(in_zero);
     }
     else if(math_flag=="/")
     {
      return_math=return_math/parseInt(val_arr[i].concat(temp_zero));
      var flag="";
     }
   }
  }
  if(!flag) return_math=return_math/parseInt("1"+return_zero);
  return parseFloat(return_math);
 }

Comment +0