Подтвердить что ты не робот

Как получить позицию курсора в редакторе исходного кода Chrome DevTools из расширения?

Я разрабатываю расширение в редакторе для Google Chrome DevTools, что позволяет открывать исходный файл во внешнем редакторе с помощью контекстного меню.

Он отлично работает в большинстве случаев (панель сети, панель производительности, инспектор стиля и т.д.), когда расположение файла в пользовательском интерфейсе содержит номер строки (например, jquery.js:2191).
Единственное исключение - панель "Источники" . A chrome.devtools.panels.setOpenResourceHandler функция обратного вызова не получает номер строки.

Есть ли у DevTools некоторый API, чтобы получить позицию курсора в редакторе исходного кода из setOpenResourceHandler() обратного вызова?

введите описание изображения здесь

4b9b3361

Ответ 1

Это объясняется как указано Chrome Issue 747888:

Итак, в первую очередь, setOpenResourceHandle() используется для случаев, когда пользователи щелкают ссылку (например, расположение linkified на консоли), что обычно приводит к открытию вкладки источника в DevTools, она не должна запускаться, когда файл открыто открыто на панели источника. Для изменения файла/позиции на вкладке источников у нас есть chrome.devtools.panels.sources.onSelectionChanged (см. макет теста, например, использование), который был недавно привезенный @jacobr).

Вот приведенный пример кода:

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);
    });
}