Это ожидается при использовании localhost внутри веб-просмотра в удаленных рабочих пространствах.Основная причина заключается в том, что веб-просмотры загружаются на локальный компьютер пользователя, а ваше расширение работает на удаленном компьютере:
Существует два возможных исправления.для этого:
Пометьте свое расширение как Расширение пользовательского интерфейса , чтобы оно всегда запускалось на локальном компьютере.
Вы можете сделать свое расширение расширением пользовательского интерфейса, если оно это делает.не нужно читать файлы из рабочей области или использовать сценарии / инструменты, которые будут установлены только с рабочей областью.Расширения пользовательского интерфейса запускаются на локальном компьютере пользователя, поэтому сервер, к которому он порождается, доступен с помощью localhost
Просто добавьте "extensionKind": "ui"
к package.json
вашего расширения, чтобы сделать это.
Настройте portMapping для своегоwebview
API сопоставления портов кода VS позволяет сопоставить порт локального хоста, используемый в вашем веб-обзоре, с произвольным портом на машине, на которой работает ваше расширение.Это даже работает, если ваше расширение работает удаленно.
API сопоставления портов был добавлен в VS Code 1.34.Чтобы использовать его, передайте объект portMapping
при создании панели веб-просмотра:
const panel = vscode.window.createWebviewPanel('myExtension.preview', 'Preview', vscode.ViewColumn.One,
{
enableScripts: true,
// This maps localhost:3000 in the webview to the express server port on the remote host.
portMapping: [
{ webviewPort: PORT, extensionHostPort: PORT}
]
});
Если ваше веб-представление по какой-либо причине использует localhost, рекомендуется установить portMapping
, чтобы он могправильно бегать куда угодно.На практике вы также должны рассмотреть возможность выбора порта, на котором работает ваш сервер.С отображением портов вам не нужно изменять html веб-просмотра для этого:
{ webviewPort: 3000, extensionHostPort: RANDOM_PORT_SERVER_WAS_STARTED_ON }
См. Документацию VS Code для получения более подробной информации