gpt4 book ai didi

javascript - 在 Firefox 中使用 Javascript 复制到剪贴板

转载 作者:数据小太阳 更新时间:2023-10-29 04:37:00 25 4
gpt4 key购买 nike

我真的需要一种方法来将一些文本复制到 Firefox 中的操作系统剪贴板。

知道这在 IE 中很容易,但在 Chrome 和 Opera 中不可能,除非使用 flash。由于各种原因,我无法使用闪存解决方案!

如果它在过去工作,但现在 netscape.security.PrivilegeManager.enablePrivilege 受到保护,据我所知(自版本 17 起)。

按照这篇文章看起来好像还是可以的:

https://developer.mozilla.org/en-US/docs/Using_the_Clipboard

相信还是有必要像这样在user.js文件中启用这种可能性

user_pref("capability.policy.policynames", "allowclipboard");
user_pref("capability.policy.allowclipboard.sites", "http://");
user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess");

但是我该怎么做呢?进行了一些测试但没有取得巨大成功,并且认为网络上没有指南可以解释如何以通用方式完成测试。例如。关于如何启用 javascript 访问剪贴板的简单指南。希望也是新手用户可以使用的指南。喜欢这样做并将其发布在这里,但首先需要一个可行的解决方案。

根据网络,复制到剪贴板有两种解决方案;

document.execCommand("copy", false, null) 

var gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
gClipboardHelper.copyString("Put me on the clipboard, please.");

我的第一次尝试都失败了。

下面的解决方案需要用户按 CTRL+C,而我需要一个解决方案,其中文本应根据按钮的按下进行复制(单个页面上有多个按钮)。

https://stackoverflow.com/questions/4344325/copy-to-clipboard-on-firefox-and-google-chrome/11346026#11346026

我以前的解决方案是这样的:

var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);

if(clip)
{
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);

if(trans)
{
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);

if(str)
{
var clipid=Components.interfaces.nsIClipboard;

if(clipid)
{
str.data = cliptext;

trans.addDataFlavor('text/unicode');
trans.setTransferData("text/unicode", str, cliptext.length*2);

clip.setData(trans, null, clipid.kGlobalClipboard); // No return value
return 0;
}
}
}
}

Components.classes 在非特权代码(不是附加组件等)中是未定义的,所以我认为任何解决方案都不会再起作用。一种选择是制作一个将在特权代码区域中执行的附加组件,并将应复制到该附加组件的文本发送到它以处理复制到操作系统剪贴板(不错的新可能项目)。

这只会将 document.execCommand("copy", false, null) 作为独立的解决方案保留在字段中。

尝试过此代码,它不会将任何内容复制到操作系统剪贴板 - 但顺便说一句,不会产生任何错误。

var pre = document.getElementById('pcryptcopytext');

if(!pre)
{
pre = document.createElement("pre");
pre.setAttribute('id', 'pcryptcopytext');
pre.setAttribute('style', 'opacity: 0; position: absolute; top: -10000px; right: 0;');
document.body.appendChild(pre);
}

pre.innerHTML = cliptext;
pre.contentEditable = true;
//pre.unselectable = "off";
//pre.focus();

if (document.createRange)
{
var rng = document.createRange();
rng.selectNodeContents(pre);
document.execCommand("copy", false, null);
document.body.removeChild(pre);
}

那么,有人有可行的解决方案吗?

最佳答案

看起来这个不再支持了,也没有替代品:(

https://support.mozilla.org/en-US/questions/977068#answer-500083

也许在 Firefox 错误中发出一些声音将帮助我们获得(安全的)解决方案。

关于javascript - 在 Firefox 中使用 Javascript 复制到剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21696052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com