Chrome和Firefox中的复制到剪贴板JavaScript函数是怎么实现的?

181

更新

看起来浏览器正在开始原生支持JS复制功能


在Mac上的Chrome和Firefox的控制台窗口中,我可以执行以下操作:

copy("party in your clipboard!");

我想将文本复制到剪贴板,但在Stack Overflow和Google上搜索了很久,似乎没有找到相关内容。

  • 这些是每个浏览器特有的功能吗?
  • 我应该在哪里查找关于这些JavaScript函数更多的信息?

浏览器版本:

alt text alt text

从Chrome控制台执行“copy”时返回的JavaScript:

function (object)
    {
        if (injectedScript._type(object) === "node") {
            var nodeId = InjectedScriptHost.pushNodePathToFrontend(object, false, false);
            InjectedScriptHost.copyNode(nodeId);
        } else
            InjectedScriptHost.copyText(object);
    }
  • 这段代码是什么意思?

以下是在 Chrome 控制台执行 "copy" 函数的 2 张截图,其中所有 Chrome 扩展都已禁用。

alt text

alt text


你使用的是哪个Firefox控制台,错误控制台吗? - Matthew Flaschen
3
我不是C++程序员,但我在http://opensource.apple.com/source/WebCore/WebCore-7533.18.1/inspector/InjectedScriptHost.cpp中找到了 void InjectedScriptHost::copyText(const String& text)。请问您需要翻译什么? - Kai
@Kai,嗯......看起来可能是内置在苹果的开源 WebKit 中了? - Mike Grace
不幸的是,这个命令不能从Chrome扩展中运行,因此它必须特定于WebKit中的开发者工具控制台。 - atomicules
确认这也适用于Safari浏览器。不错的发现! - bizi
看起来这个也可以不用Firebug工作。 :D https://developer.mozilla.org/zh-CN/docs/Tools/Web_Console/Helpers - Stefnotch
2个回答

73

我相信这些是预定义的Firebug控制台函数,至少在Firebug中似乎是这样。例如,如果您尝试调用window.copy,您将收到有关未定义函数的警告,因此它绝对不是浏览器函数,并且不能在普通JavaScript文件中使用。在玩弄一下之后,以下函数似乎也可以在JavaScript控制台中工作:

  • clear()
  • profile()

在Chrome控制台中运行这些函数会显示出它们在Webkit控制台中的源代码:

> profile
function ()
{
return console.profile.apply(console, arguments)
}

> clear
function ()
{
InjectedScriptHost.clearConsoleMessages();
}

> copy
function (object)
{
if (injectedScript._type(object) === "node")
object = object.outerHTML;
InjectedScriptHost.copyText(object);
}

尽管Firebug源代码中也定义了一系列函数:

this.clear = function()  // no web page interaction
{
    Firebug.Console.clear(context);
};

this.inspect = function(obj, panelName)  // no web page interaction
{
    Firebug.chrome.select(obj, panelName);
};

this.keys = function(o)
{
    return FBL.keys(o);  // the object is from the page, unwrapped
};

this.values = function(o)
{
    return FBL.values(o); // the object is from the page, unwrapped
};

// etc...

2
似乎在使用node-inspector调试控制台时,Chrome 44不起作用。 “剪贴板在托管模式下未启用。请使用chrome:// inspect进行检查”。 - jcollum
1
不错。这在 Chrome 版本 61.0.3163.100 (官方版本) (64 位) 中有效! - Shanimal
2
在我的 Chrome 开发者工具中看起来它正在工作,并且 window.copy('content') 也能正常使用(在 Firefox 中只需要使用 copy('content') - morhook
我正在使用新版Edge,复制功能也可以正常使用。 - code

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接