Секретная копия в буфер обмена JavaScript функции в Chrome и Firefox?

150

Обновить

Похоже, что браузеры начинают изначально поддерживать копирование в JS


В консольных окнах Chrome и Firefox на Mac я могу выполнить

copy("party in your clipboard!");

и текст копируется в мой буфер обмена. Я искал SO и Google и не могу найти ничего по этому поводу.

  • Они специфичны для каждого браузера?
  • Где я могу найти больше информации об этих функциях JavaScript?

Версии браузера:

альтернативный текст альтернативный текст

JavaScript возвращается из консоли Chrome при выполнении «копирования»

function (object)
    {
        if (injectedScript._type(object) === "node") {
            var nodeId = InjectedScriptHost.pushNodePathToFrontend(object, false, false);
            InjectedScriptHost.copyNode(nodeId);
        } else
            InjectedScriptHost.copyText(object);
    }
  • Что означает этот код?

Вот 2 скриншота выполнения функции копирования в консоли Chrome со всеми отключенными расширениями Chrome

альтернативный текст

альтернативный текст

Майк Грейс
источник
Какую консоль Firefox вы используете, Error Console?
Мэтью Флэшен
2
Я не программист на C ++, но я нашел void InjectedScriptHost::copyText(const String& text)в opensource.apple.com/source/WebCore/WebCore-7533.18.1/inspector/…
Кай
@ Кай, Хмммммм ... похоже, что он встроен в открытый веб-набор Apple?
Майк Грейс,
К сожалению, эта команда не работает с расширением Chrome, поэтому она должна быть специфичной для консоли инструментов разработчика в WebKit.
atomicules
подтвердите, что это также работает с Safari. Хорошая находка!
Bizi

Ответы:

62

Я полагаю, что это предопределенные консольные функции 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
Кажется, что это не работает в Chrome 44 при использовании консоли отладки node-inspector. Clipboard is not enabled in hosted mode. Please inspect using chrome://inspect
Jcollum
1
Ницца. Это работает в Chrome версии 61.0.3163.100 (официальная сборка) (64-разрядная версия)!
Shanimal
1
На моем Chrome инструмент разработчика выглядит так, как будто он работает, а также работает window.copy('content')(на Firefox только с copy('content')работами)
morhook