当用户从剪贴板粘贴时,我需要过滤掉某些字符。(我实际上并不想修改剪贴板中的内容。)我已经在 IE 中使用它。叹息...
tl;dr: user.jscapability.policy
中的项目使其进入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 错误 284673——about:config 隐藏了“capability.policy”首选项。但是,我确实认为这些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 剪贴板 = 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); 如果(!可转让){ throw new Error('内部错误——无法创建可转移对象'); } transferable.addDataFlavor("text/unicode"); clipboard.getData(可转移,clipboard.kGlobalClipboard); var clipboard_data = new Object(); var clipboard_length = new Object(); transferable.getTransferData("text/unicode", clipboard_data, clipboard_length); var 剪贴板文本 = ''; 如果(!!剪贴板数据){ var clipboard_nsISupportsString = clipboard_data.value.QueryInterface(Components.interfaces.nsISupportsString); clipboard_text = clipboard_nsISupportsString.data.substring(0, clipboard_length.value / 2); } 返回(剪贴板文本);
- 代码在第一行失败,在 Firebug 控制台中返回此错误:
<https://my-site.com> 获取属性 XPCComponents.classes 的权限被拒绝
注意:我实际上是在真实的 URL 上运行它,它确实显示在错误消息中——我只是在这里将它更改为一个虚拟名称。
- 我还看到了一些其他示例,
createInstance
在第一行而不是getService
,但第一行仍然生成相同的错误文本:var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard); // ...
环境 (这是我无法控制的)
- 没有管理员访问计算机的权限
- 视窗
- 火狐浏览器 10
参考