728x90
반응형
회사에서 특정 내용을 클립보드에 복사하는 기능을 만들 필요가 있었는데...
그동안 파폭은 지원이 안된다는 단정하에, 익스에서만 돌아가도록 만들었었다.
그런데 혹시나 하는 맘에 구글링 해 보았더니...
다음과 같은 팁이 나오더라... ㅋ
무단 펌질이라서 -.-;;
##### 펌 내용 시작...
<input type="button" onclick='return copy_clip("클립보드로 복사했습니다.")'> 혹은, MT에선
<input type="button" onclick='return copy_clip("<$MTEntryTrackbackLink$>")'>
무버블타입의 경우 아래의 스크립트를 바로 해당 아카이브 템플릿의 <head>태그 사이에 복사해 넣지 말고, Template Modules 섹션에서 clipboard라는 이름으로 템플릿 모듈을 만든 후에,
적용할 아카이브 템플릿의 <head> 태그 안에서 <MTInclude module="clipboard"> 식으로 사용하는게 낫다. 블록을 오래 운용하다보면 당연히 이런 저런 자바스크립트 모듈을 덧붙이게 되는데 그럴 때 마다 한 메인 아카이브 템플릿에다 복사해 넣는다면 차후 수정시에 곤란을 겪기 쉽다.
<script language="javascript" type="text/javascript">
<!--
function copy_clip(meintext){
if (window.clipboardData)
{
// the IE-manier
window.clipboardData.setData("Text", meintext);
// waarschijnlijk niet de beste manier om Moz/NS te detecteren;
// het is mij echter onbekend vanaf welke versie dit precies werkt:
}
else if (window.netscape)
{
// dit is belangrijk maar staat nergens duidelijk vermeld:
// you have to sign the code to enable this, or see notes below
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
// maak een interface naar het clipboard
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if (!clip) return;
// maak een transferable
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if (!trans) return;
// specificeer wat voor soort data we op willen halen; text in dit geval
trans.addDataFlavor('text/unicode');
// om de data uit de transferable te halen hebben we 2 nieuwe objecten nodig om het in op te slaan
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
var copytext=meintext;
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);
}
alert("반갑습니다.\n" + meintext);
return false;
}
//-->
</script>
가능하면 해석 불가한 주석이라도 지우지 말고 사용하는게 좋을 것 같다.
모 질라, 파이어폭스는 보안이 강화되어서 자바스크립트라 하더라도 그 내용에 따라 기존의 Active-X컨트롤처럼 일종의 권한 허가를 받아야 가능하다고 한다. 이 스크립트의 경우 시스템의 클립보드에 접근하는 것이라 그런지, 이를 실행시키려 하면 시스템 보안에 관한 창이 뜨면서 권한 허가 여부를 묻는다. 당연히 "예" 를 눌러야 복사가 될 것이다.
위 루틴은 복사한 후에 확인창(alert창)을 띄워 주는데 혹 이런 창이 안뜨고 복사만 된다 던지 혹은 정상적인 작동이 안된다 싶을 경우엔, 브라우져의 주소창에 about:config 를 치면 해당 설정 내용이 쭉 나타나는데 그 중에서 Signed.applets.codebase_principal_support 라는 부분을 찾아서 true로 바꿔주면 문제없이 작동할 것이다.
##### 펌 내용 끝...
그동안 파폭은 지원이 안된다는 단정하에, 익스에서만 돌아가도록 만들었었다.
그런데 혹시나 하는 맘에 구글링 해 보았더니...
다음과 같은 팁이 나오더라... ㅋ
무단 펌질이라서 -.-;;
##### 펌 내용 시작...
<input type="button" onclick='return copy_clip("클립보드로 복사했습니다.")'> 혹은, MT에선
<input type="button" onclick='return copy_clip("<$MTEntryTrackbackLink$>")'>
무버블타입의 경우 아래의 스크립트를 바로 해당 아카이브 템플릿의 <head>태그 사이에 복사해 넣지 말고, Template Modules 섹션에서 clipboard라는 이름으로 템플릿 모듈을 만든 후에,
적용할 아카이브 템플릿의 <head> 태그 안에서 <MTInclude module="clipboard"> 식으로 사용하는게 낫다. 블록을 오래 운용하다보면 당연히 이런 저런 자바스크립트 모듈을 덧붙이게 되는데 그럴 때 마다 한 메인 아카이브 템플릿에다 복사해 넣는다면 차후 수정시에 곤란을 겪기 쉽다.
<script language="javascript" type="text/javascript">
<!--
function copy_clip(meintext){
if (window.clipboardData)
{
// the IE-manier
window.clipboardData.setData("Text", meintext);
// waarschijnlijk niet de beste manier om Moz/NS te detecteren;
// het is mij echter onbekend vanaf welke versie dit precies werkt:
}
else if (window.netscape)
{
// dit is belangrijk maar staat nergens duidelijk vermeld:
// you have to sign the code to enable this, or see notes below
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
// maak een interface naar het clipboard
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
if (!clip) return;
// maak een transferable
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
if (!trans) return;
// specificeer wat voor soort data we op willen halen; text in dit geval
trans.addDataFlavor('text/unicode');
// om de data uit de transferable te halen hebben we 2 nieuwe objecten nodig om het in op te slaan
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
var copytext=meintext;
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);
}
alert("반갑습니다.\n" + meintext);
return false;
}
//-->
</script>
가능하면 해석 불가한 주석이라도 지우지 말고 사용하는게 좋을 것 같다.
모 질라, 파이어폭스는 보안이 강화되어서 자바스크립트라 하더라도 그 내용에 따라 기존의 Active-X컨트롤처럼 일종의 권한 허가를 받아야 가능하다고 한다. 이 스크립트의 경우 시스템의 클립보드에 접근하는 것이라 그런지, 이를 실행시키려 하면 시스템 보안에 관한 창이 뜨면서 권한 허가 여부를 묻는다. 당연히 "예" 를 눌러야 복사가 될 것이다.
위 루틴은 복사한 후에 확인창(alert창)을 띄워 주는데 혹 이런 창이 안뜨고 복사만 된다 던지 혹은 정상적인 작동이 안된다 싶을 경우엔, 브라우져의 주소창에 about:config 를 치면 해당 설정 내용이 쭉 나타나는데 그 중에서 Signed.applets.codebase_principal_support 라는 부분을 찾아서 true로 바꿔주면 문제없이 작동할 것이다.
##### 펌 내용 끝...
728x90
반응형
'Develop! > script, Ajax' 카테고리의 다른 글
폼 객체의 이름을 배열 형식으로 지었을 경우 객체에 접근하는 방법... (0) | 2006.11.09 |
---|---|
파일 업로드 시 html에서 용량 제어하기 (0) | 2006.11.09 |
XP Servicepack2, IE7에서도 팝업창 사이즈 이쁘게 조절하기 (2) | 2006.11.09 |
자바스크립트 객체의 개수 및 하위 객체 알아오기 (0) | 2006.11.09 |
자바스크립트의 인자값 개수가 정확하게 넘어 왔나 확인하기 (0) | 2006.11.01 |