秘密复制到Chrome和Firefox中的剪贴板JavaScript功能?

更新

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


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

copy("party in your clipboard!");

文本被复制到我的剪贴板。我搜索了SO和Google,似乎找不到任何关于此的内容。

  • 这些是特定于每个浏览器的吗?
  • 在哪里可以找到有关这些 JavaScript 函数的更多信息?

浏览器版本:

alt textalt text

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

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

以下是在禁用所有Chrome扩展程序的情况下在Chrome控制台中执行复制功能的2个屏幕截图

alt text

alt text


答案 1

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

  • 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

在这里,您可以看到Chrome Dev工具的参考复制命令:https://developers.google.com/web/tools/chrome-devtools/console/utilities#copy

您不应该在真正的JS跨浏览器上使用此命令(仅用于在控制台上进行调试)。