ブラウザをまたいで開発した経験総括(四)クリップボードにどう書きますか?

2586 ワード

IE、FirefoxはJavaScriptがクリップボードに内容を書き込むことをサポートできます.
IEは簡単にクリップボードの内容をサポートしてコマンドを書き込むことができます.execCommand()を使うこともできます.window.clipboardDataを利用することもできます.
execCommandを使うには、まずページから選択してクリップボードにコピーする内容が必要です.以下のコードのようです.
 
  
var doc = obj.createTextRange();
doc.select();
doc.execCommand('copy');
window.clipboardDataを使う方法は以下の通りです.コードの中で同時にFirefoxの下でクリップボードに書き込む機能を実現しました.
 
  
if(window.clipboardData) //IE
{
window.clipboardData.clearData();
window.clipboardData.setData("Text", txt);
}
else if (window.netscape)
{
try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
}
catch (e)
{
alert("please visit 'about:config' and set signed.applets.codebase_principal_support as 'true'");
//
}

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 = txt;
str.data = copytext;
       trans.setTransferData("text/unicode",str,copytext.length*2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip)
return;
       clip.setData(trans,null,clipid.kGlobalClipboard);
}
以上のコードはIE、Firefoxのクリップ版にユーザー定義の内容を書き込むことができますが、operaとwebkitカーネルブラウザはセキュリティに対する要求がより高く、このようなjavascriptが直接クリップボードの内容を操作する方式をサポートしないと、他のスクリプト言語「曲線救国」を通じてしかできません.
Opera、Safari、ChromeはアクションScriptを使ってクリップボードに内容を書き込みます.
具体的な実現は、元の動作ボタンをflexまたはflashで外観を実現し、元の写真または文字ボタンを置き換えて、このボタンをクリックした時に、次のアクションScriptスクリプトを実行します.
//ブラウザ環境からクリップボードに書き込む内容を取得する
var s:String=String(External Interface.call(「getURL 4 Clip board」);getURL 4 Clip boardは、ページ上のreturnクリップボードの内容のjavascript方法です.
//クリップボードの内容の設定
System.set Clip board(s);
//呼び出し完了してクリップボードの内容を設定した後、継続する必要があるJavaScript関数、例えばユーザ情報を提示するなど
External Interface.call(「copyURLCompleted」);copyURLCompletedはページ上のjavascript方法であり、コピーした仕事を続けています.