jus*_*ike 14 javascript firefox configuration-files windows-vista onpaste
当用户从剪贴板粘贴时,我需要过滤掉某些字符.(我实际上并不想修改剪贴板中的内容.)我已经在IE中使用了这个.叹了口气 ......
tl; dr: user.js中的capability.policy项目使其成为prefs.js但未生效.
仅供参考,我可以合理地让所有用户安装user.js的.但是我们都没有管理员访问我们的机器,所以这就是我可以做的关于配置的所有事情.
谢谢你的帮助!
注意:
遵循的步骤
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不是真正的网站.
capability.policy项目- 由于Bugzilla Bug 284673 - about:config隐藏"capability.policy"首选项.但是,我确实认为这些user.js项目"工作"并且文件位于正确的文件夹中,因为之后:
just.mike条目
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因为字母顺序排在第一位,但这也不起作用.)
onpaste:
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');
}
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上运行它,它会显示在错误消息中 - 我刚刚将其更改为虚拟名称.
createInstance而不是getService,但第一行仍然生成相同的错误文本:
var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard); // ...
环境 (这是我无法控制的)
参考
Grubby 但跨浏览器的方式是将当前输入的值与 onchange 事件上的先前输入的值进行比较。
\n\n如果它的长度增加或值相差太大(不仅是 redu\xd1\x81ed 而且有很多新字符)——可能是从剪贴板粘贴了某些内容。\n类似这样的内容:
\n\n$('input, textarea').change(function(){\n var prev = $(this).data('prev-val'), \n current = $(this).val();\n if (is_big_changes(prev,current)) {\n $(this).val(my_filter_func(current));\n }\n if (!prev) {\n $(this).data('prev-val', current);\n } \n})\nRun Code Online (Sandbox Code Playgroud)\n\n(这只是概念证明,所以我使用 jQuery 来避免大量编码)
\n\n其中 is_big_changes 和 my_filter_func ——您需要实现的函数。
\n\n警告这种方法可能会出现很多邪恶的错误,而且我知道,它看起来非常难看。我的交易是提出。
\n| 归档时间: |
|
| 查看次数: |
4763 次 |
| 最近记录: |