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

Posted

技术标签:

【中文标题】Chrome和Firefox中的秘密复制到剪贴板JavaScript功能?【英文标题】:Secret copy to clipboard JavaScript function in Chrome and Firefox? 【发布时间】:2011-06-01 08:17:06 【问题描述】:

更新

看起来像browsers are starting to support copy natively in JS


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

copy("party in your clipboard!");

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

这些是否特定于每个浏览器? 在哪里可以找到更多关于 这些 javascript 函数?

浏览器版本:

执行“复制”时从 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 个屏幕截图

【问题讨论】:

你使用的是哪个 Firefox 控制台,错误控制台? 我不是 C++ 程序员,但我在 opensource.apple.com/source/WebCore/WebCore-7533.18.1/inspector/… 中找到了 void InjectedScriptHost::copyText(const String& text) @Kai,Hmmmmmm... 看起来它可能是内置在 Apple 的开源 webkit 中的? 很遗憾,此命令不适用于 Chrome 扩展程序,因此它必须特定于 WebKit 中的开发人员工具控制台。 确认这也适用于 Safari。很好的发现! 【参考方案1】:

我相信这些是预定义的 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 source 还定义了一个函数列表:

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...

【讨论】:

在使用 node-inspector 调试控制台时,这似乎在 Chrome 44 中不起作用。 Clipboard is not enabled in hosted mode. Please inspect using chrome://inspect 不错。这适用于 Chrome 版本 61.0.3163.100(官方构建)(64 位)! 在我的 Chrome 开发者工具上,它看起来可以正常工作,window.copy('content') 也可以工作(仅在 Firefox 上,copy('content') 可以工作)【参考方案2】:

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

你不应该在真正的 JS 跨浏览器上使用这个命令(只是为了在控制台上调试)。

【讨论】:

以上是关于Chrome和Firefox中的秘密复制到剪贴板JavaScript功能?的主要内容,如果未能解决你的问题,请参考以下文章

复制到剪贴板不适用于 VueJS 中的 Chrome 浏览器

使用JavaScript读取所选文本并将其复制到剪贴板

使用JavaScript读取所选文本并将其复制到剪贴板

js copy

Clipboard.js 使用说明

JS处理剪贴板