ユーザーがクリップボードから貼り付けるときに、特定の文字を除外する必要があります。(実際にはクリップボードにあるものを変更したくありません。)これはすでにIEで動作しています。ため息...
tl;dr: capability.policy
user.jsのアイテムはprefs.jsになりますが、有効になりません。
参考までに、合理的にすべてのユーザーにuser.jsをインストールさせることができます。しかし、私たちの誰もマシンへの管理者アクセス権を持っていないので、構成に関して私ができることはほぼこれだけです。
助けてくれてありがとう!
ノート:
- この質問の目的のために、私はクリップボードへのアクセスを「回避」したくありません-たとえば、貼り付けが発生
した後
にDOM要素の値を操作したくありません - フレームワーク/ライブラリ(jQuery、Dojo、Prototype、YUI など) を必要とするソリューションは必要ありません。
たどった手順
- URL about:support => Profile Directory =>に移動して、プロファイルフォルダの場所を特定しました。Open Containing Folder
- 次の行で
user.jsを作成して、Firefox でクリップボードを有効にしようとしました。
user_pref("just.mike", "user.js が機能するかどうかをテストします。"); user_pref("capability.policy.policynames", "allowclipboard"); user_pref("capability.policy.allowclipboard.sites", "https://my-site.com"); user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess"); user_pref("capability.policy.allowclipboard.Clipboard.paste", "allAccess");
注: https://my-site.com は実際のサイトではありません。
- 結局のところ、 about:configを使用しても
capability.policy
項目は表示されません- Bugzilla Bug 284673 - about:config hides "capability.policy" Preferences が原因です。ただし、これらのuser.jsアイテムは「機能」し、ファイルは正しいフォルダーにあると 思います。- about:configに
just.mike
エントリ が表示されました - prefs.jsにはすべての新しい行が含まれていましたが、順序が異なります-- アルファベット順:
user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess"); user_pref("capability.policy.allowclipboard.Clipboard.paste", "allAccess"); user_pref("capability.policy.allowclipboard.sites", "https://my-site.com"); user_pref("capability.policy.policynames", "allowclipboard"); ... user_pref("just.mike", "user.js が機能するかどうかをテストします。");
Zallowclipboard
(参考までに、アルファベット順で行が最初になるようにどこでも 試しpolicynames
ましたが、それもうまくいきませんでした。)
- about:configに
- 次のイベントの
後に Firefox でクリップボードを読み込もうとしました:
onpaste
var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard); もし (!クリップボード) { throw new Error('内部エラー -- クリップボード オブジェクトを作成できませんでした'); } var transferable = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable); if (!transferable) { throw new Error('内部エラー -- 転送可能なオブジェクトを作成できませんでした'); } transferable.addDataFlavor("テキスト/ユニコード"); clipboard.getData(転送可能、clipboard.kGlobalClipboard); var clipboard_data = new Object(); var clipboard_length = new Object(); transferable.getTransferData("テキスト/ユニコード", clipboard_data, clipboard_length); var clipboard_text = ''; if (!!clipboard_data) { var clipboard_nsISupportsString = clipboard_data.value.QueryInterface(Components.interfaces.nsISupportsString); clipboard_text = clipboard_nsISupportsString.data.substring(0, clipboard_length.value / 2); } return(clipboard_text);
- コードは最初の行で失敗し、Firebug コンソールに次のエラーが返されます。
<https://my-site.com> がプロパティ XPCComponents.classes を取得するためのアクセス許可が拒否されました
注: 実際には実際の URL で実行していますが、エラー メッセージに表示されます。ここでは、ダミーの名前に変更しただけです。
- の代わりに最初の行で が使用されている他の例もいくつか見ましたが、最初の行でも同じエラー テキストが生成されます。
createInstance
getService
var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard); // ...
環境 (これは私の制御外です)
- コンピューターへの管理者アクセスなし
- Windows ビスタ
- モジラ Firefox 10
参考文献