0

クリップボード JavaScript 関数から読み取りを作成しようとしていますが、通常は機能していますが、out パラメータ (Components.interfaces.nsITransferable) を使用して作成したオブジェクトから実際の文字列を抽出できないようです。ご参考までに、これはローカル イントラネット用であり、クリップボードへのアクセスを有効にしています。

これは、out パラメーターのオブジェクトを作成して設定するコードの一部です。obj_length.value を返すと、正しい長さ (Unicode の場合は *2) が得られるため、基本的に機能していることはわかっています。ただし、obj.value は [xpconnect でラップされた nsISupports] 型のオブジェクトしか提供しません。クリップボードの内容を含む文字列が必要です!

var obj = {};
var obj_length = {};
b.getTransferData("text/unicode", obj, obj_length);
return obj.value;

クリップボードの内容を抽出する方法を教えてください。私はとても近いです!

4

1 に答える 1

0

結局のところ、私は自分の質問に答えることができました。私にとってはちょっとした RTFM ですが、他の人がここ SO で見つけるのに役立つ場合は、ここで見つけました。

https://developer.mozilla.org/en/Using_the_Clipboard

そして、これが私が使用した完全なコードです。FF 3.5 で動作確認済みです。IE では動作しませんが、IE をテストしてそのブラウザーのサポートを追加するのは非常に簡単です。Chrome、Opera、Safari などについてはよくわかりません。Firefox でクリップボードへのアクセスを有効にする必要があることを思い出してください。有効にしないと機能しません。したがって、公開サイトにはおそらく適していません。

try {
    netscape.security.PrivilegeManager
            .enablePrivilege("UniversalXPConnect");
} catch (e) {
    alert("You need to enable clipboard access in FireFox");
    return false;
}

var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);
if (!clip) return false;

var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
if (!trans) return false;
trans.addDataFlavor("text/unicode");

clip.getData(trans, clip.kGlobalClipboard);

var str       = new Object();
var strLength = new Object();

trans.getTransferData("text/unicode", str, strLength);

if (str) str       = str.value.QueryInterface(Components.interfaces.nsISupportsString);
if (str) pastetext = str.data.substring(0, strLength.value / 2);

return pastetext;
于 2009-11-03T19:08:33.327 に答える