我需要过滤掉用户从剪贴板粘贴时的某些字符。(实际上,我不想修改剪贴板中的内容。)我已经在IE中实现了这个功能。叹气...
简而言之:user.js
中的capability.policy
项目会进入prefs.js
,但不会生效。
FYI,我可以合理地让所有用户安装user.js
。但是我们都没有管理员权限,所以这就是我关于配置能做的全部。
感谢任何帮助!
注意:
- 为了本问题的目的,我不想“绕过”访问剪贴板 --
例如,我不想在粘贴发生后操作DOM元素的值 - 我不想要需要框架/库(如jQuery、Dojo、Prototype、YUI等)的解决方案
跟随的步骤
1. 通过访问URL about:support => Profile Directory => Open Containing Folder 确定了profile文件夹的位置。 2. 通过创建包含以下行的user.js,尝试在Firefox中启用剪贴板:user_pref("just.mike", "test to see if user.js works."); 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不是真实网站。 3. 由于Bugzilla Bug 284673 - about:config hides "capability.policy" preferences,
capability.policy
项在about:config中不可见。但是,我认为这些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", "test to see if user.js works.");
Zallowclipboard
,以使policynames
行由于按字母顺序排列而首先出现,但这也不起作用。)
4. 在onpaste
事件之后,尝试在Firefox中读取剪贴板,代码如下:
var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard); if (!clipboard) { throw new Error('internal error -- could not create clipboard object'); }5. 该代码在第一行失败,在Firebug控制台返回以下错误:
var transferable = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable); if (!transferable) { throw new Error('internal error -- could not create transferable object'); }
transferable.addDataFlavor("text/unicode"); clipboard.getData(transferable, clipboard.kGlobalClipboard);
var clipboard_data = new Object(); var clipboard_length = new Object();
transferable.getTransferData("text/unicode", 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);
Permission denied for <https://my-site.com> to get property XPCComponents.classes注意:我实际上在真实的URL上运行它,该URL会显示在错误消息中--这里只是将其更改为虚拟名称。 6. 我还看到一些其他示例,在第一行使用
createInstance
而不是getService
,但第一行仍然生成相同的错误文本:
var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard); // ...
环境 (这超出了我的控制范围)
- 没有计算机管理员访问权限
- Windows Vista
- Mozilla Firefox 10
参考资料
nsISupportsString
和nsITransferable
之后初始化nsIClipboard
,也许这可能会产生影响。https://developer.mozilla.org/en/Using_the_Clipboard - filype