27 votes

Comment obtenir la position du curseur dans un éditeur de sources Chrome DevTools à partir d'une extension ?

Je développe Ouvrir dans l'éditeur extension pour Google Chrome DevTools qui permet d'ouvrir le fichier source dans un éditeur externe à l'aide du menu contextuel.

Il fonctionne parfaitement dans la plupart des cas ( Panneau réseau , Panneau de performance , Inspecteur de style et ainsi de suite) lorsque l'emplacement du fichier dans l'interface utilisateur contient un numéro de ligne (tel que jquery.js:2191 ).
La seule exception est Panel de sources . A chrome.devtools.panels.setOpenResourceHandler La fonction callback ne reçoit pas de numéro de ligne.

DevTools dispose-t-il d'une API pour obtenir la position du curseur dans l'éditeur de source à partir de setOpenResourceHandler() le rappel ?

enter image description here

2voto

kenorb Points 2464

Ceci a été expliqué comme indiqué dans le rapport Problème de Chrome 747888 :

Donc, tout d'abord, setOpenResourceHandle() est destiné aux cas où les utilisateurs cliquent sur un lien (par exemple, un lien vers un site Web). linkified location in console) qui résulte normalement de l'ouverture d'un onglet source dans DevTools, il n'est pas destiné à être déclenché lorsqu'un fichier est explicitement ouvert dans le panneau source. Pour les changements de fichier/position dans l'onglet des sources, nous avons chrome.devtools.panels.sources.onSelectionChanged (voir un test d'implantation par exemple l'utilisation) qui a récemment été ramené par @jacobr ).

Voici l'exemple de code mentionné :

function extension_testElementsOnSelectionChanged(nextTest)
{
    function onSelectionChanged()
    {
        webInspector.panels.elements.onSelectionChanged.removeListener(onSelectionChanged);
        output("onSelectionChanged fired");
        nextTest();
    }
    webInspector.panels.elements.onSelectionChanged.addListener(onSelectionChanged);
    webInspector.inspectedWindow.eval("inspect(document.body.children[0]), 0");
}

function extension_testSourcesOnSelectionChangedShowFile(nextTest)
{
    function onSelectionChanged(selectionInfo)
    {
        webInspector.panels.sources.onSelectionChanged.removeListener(onSelectionChanged);
        output("sources onSelectionChanged fired, selectionInfo:");
        dumpObject(selectionInfo, {url: "url"});
        nextTest();
    }
    webInspector.panels.sources.onSelectionChanged.addListener(onSelectionChanged);
    evaluateOnFrontend("InspectorTest.showScriptSource(\"test-script.js\")");
}

function extension_testSourcesOnSelectionChangedShowFileAndLine(nextTest)
{
    webInspector.inspectedWindow.eval("location.href", function(inspectedPageURL) {
        function onSelectionChanged(selectionInfo)
        {
            webInspector.panels.sources.onSelectionChanged.removeListener(onSelectionChanged);
            output("sources onSelectionChanged fired, selectionInfo:");
            dumpObject(selectionInfo, {url: "url"});
            nextTest();
        }
        webInspector.panels.sources.onSelectionChanged.addListener(onSelectionChanged);

        var basePath = inspectedPageURL.replace(/\/[^/]*$/, "/");
        webInspector.panels.openResource(basePath + "resources/test-script.js", 2);
    });
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X