Copie secrète dans la fonction JavaScript du presse-papiers dans Chrome et Firefox?

150

Mettre à jour

On dirait que les navigateurs commencent à prendre en charge la copie de manière native dans JS


Dans les fenêtres de console de Chrome et Firefox sur Mac, je peux exécuter

copy("party in your clipboard!");

et le texte est copié dans mon presse-papiers. J'ai recherché SO et Google et je n'arrive pas à trouver quoi que ce soit à ce sujet.

  • Sont-ils spécifiques à chaque navigateur?
  • Où puis-je trouver plus d'informations sur ces fonctions JavaScript?

Versions du navigateur:

texte alternatif texte alternatif

JavaScript renvoyé par la console Chrome lors de l'exécution de la "copie"

function (object)
    {
        if (injectedScript._type(object) === "node") {
            var nodeId = InjectedScriptHost.pushNodePathToFrontend(object, false, false);
            InjectedScriptHost.copyNode(nodeId);
        } else
            InjectedScriptHost.copyText(object);
    }
  • que veut dire ce code?

Voici 2 captures d'écran de l'exécution de la fonction de copie dans la console Chrome avec toutes les extensions Chrome désactivées

texte alternatif

texte alternatif

Mike Grace
la source
Quelle console Firefox utilisez-vous, Error Console?
Matthew Flaschen
2
Je ne suis pas un programmeur C ++, mais j'ai trouvé void InjectedScriptHost::copyText(const String& text)dans opensource.apple.com/source/WebCore/WebCore-7533.18.1/inspector/...
Kai
@Kai, Hmmmmmm ... on dirait peut-être qu'il est intégré au webkit open source d'Apple alors?
Mike Grace
Malheureusement, cette commande ne fonctionne pas à partir d'une extension Chrome, elle doit donc être spécifique à la console des outils de développement dans WebKit.
atomicules
confirmez que cela fonctionne également avec Safari. Bonne trouvaille!
bizi

Réponses:

62

Je crois que ce sont des fonctions de console Firebug prédéfinies - du moins cela semble être le cas pour Firebug. Si vous essayez d'appeler window.copypar exemple, vous recevrez un avertissement concernant la fonction non définie, donc ce n'est certainement pas une fonction de navigateur et ne peut pas être utilisée dans des fichiers JavaScript normaux. Les fonctions suivantes semblent également fonctionner dans la console JavaScript, après avoir un peu joué avec:

  • clear()
  • profile()

Les exécuter dans la console Chrome révèle la source de ces fonctions dans la console 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);
}

Alors que la source Firebug définit également une liste de fonctions:

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...
Yi Jiang
la source
2
Il semble que cela ne fonctionne pas dans Chrome 44 lors de l'utilisation de la console de débogage de l'inspecteur de nœuds. Clipboard is not enabled in hosted mode. Please inspect using chrome://inspect
jcollum
1
Agréable. Cela fonctionne dans la version 61.0.3163.100 de Chrome (version officielle) (64 bits)!
Shanimal
1
Sur mon outil de développement Chrome, il semble que cela fonctionne et fonctionne également window.copy('content')(sur Firefox uniquement avec des copy('content')œuvres)
morhook