#visual-studio-code #cors #vscode-extensions
#visual-studio-code #cors #vscode-расширения
Вопрос:
Я работаю над расширением, основанным на VSCode WebView. Расширение обеспечивает интеграцию с системой отслеживания проблем через HTTP API, например, Jira. Я хочу отобразить информацию о проблеме в WebView и создать несколько форм для внесения комментариев и изменения статуса проблемы. Я не хочу использовать передачу сообщений между расширением и WebView. Когда я пытаюсь создать HTTP-запрос к API внутри WebView, я получаю ошибку:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Сервер не поддерживает Access-Control-Allow-Origin для источника «null» или «localhost».
Можно ли создать HTTP-запрос из WebView на сервер, игнорируя отсутствующий заголовок Access-Control-Allow-Origin? Может быть, я могу настроить некоторую политику для панели WebView? Или создать прокси localhost внутри расширения и отправить запрос через прокси?
Пример кода
import * as vscode from 'vscode';
export function activate(context: vscode.ExtensionContext) {
vscode.commands.registerCommand('catCoding.start', () => {
// Create and show panel
const panel = vscode.window.createWebviewPanel(
'catCoding',
'Cat Coding',
vscode.ViewColumn.One,
{enableScripts: true}
);
// And set its HTML content
panel.webview.html = getWebviewContent();
})
}
function getWebviewContent() {
return `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cat Coding</title>
</head>
<body>
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://google.com', true);
xhr.send();
</script>
</body>
</html>`;
}
Ответ №1:
Ответ от проблемы с Github
Для изменения этого нет поддержки vscode. Вы должны думать о webview скорее как о представлении html (таком, у которого нет сервера или источника), а не как о веб-странице
На постерах в stackoverflow могут содержаться предложения по обходным путям
Ответ №2:
Поддержка изоляции из разных источников была только что добавлена для Webview с помощью vscode-coi
параметра url; см. https://github.com/microsoft/vscode/issues/137884