web-dev-qa-db-ja.com

拡張機能からChrome DevToolsソースエディタでカーソル位置を取得するにはどうすればよいですか?

私は開発しました エディターで開く Googleの拡張機能Chromeコンテキストメニューを使用して外部エディターでソースファイルを開くことができるDevTools。

ほとんどの場合、完全に機能します(ネットワークパネルパフォーマンスパネルスタイルインスペクターなど)UIのファイルの場所に行番号が含まれている場合(_jquery.js:2191_など)。
唯一の例外はソースパネルです。 chrome.devtools.panels.setOpenResourceHandler コールバック関数は行番号を受け取りません。

DevToolsには、setOpenResourceHandler()コールバックからソースエディターのカーソル位置を取得するためのAPIがありますか?

enter image description here

27

これは報告されているように説明されています 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);
    });
}
_
2
kenorb