我正在尝试实现自己的VSCode扩展。扩展将启动一些创建localhost:port
的子进程。网站localhost:port
应该在WebView
中加载。目前,它在本地机器上工作得很好,但当我使用SSH连接时,Webview无法加载到远程机器上。
据我所知,VSCode在从webview使用localhost时存在一些问题。我已经尝试使用这两种描述的解决方法。但不幸的是,没有人工作。
例如,我从网站上实现了第二个解决方案。我使用以下代码创建panel
:
let panel = vscode.window.createWebviewPanel(view_type, tab_name,
vscode.ViewColumn.One,
{
enableScripts: true,
retainContextWhenHidden: true
});
字符串
然后我尝试从子进程中可视化localhost:
const process = subprocess.spawn(cmd, [model_path]);
process.stdout.on('data', async (data) => {
const output = data.toString();
const url_path = output;
const web_uri = await vscode.env.asExternalUri(vscode.Uri.parse(url_path));
panel.webview.html = this.getHTMLForWebview(web_uri);
});
private getHTMLForWebview(web_uri: vscode.Uri): string {
return `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Visualization</title>
</head>
<body>
<iframe
width="100%"
height="800"
src="${web_uri}"
></iframe>
</body>
</html>`;
}
型
正如我之前所说,它在我的本地Windows机器上工作。但是我在远程Linux机器上看到空的webview(只是一个空的框架):x1c 0d1x的数据
这是我第一次延期所以我可能错过了什么。
我应该添加/重写在远程机器上渲染本地主机?
我也已经看到了another解决方案。这只是一个链接到已知的网站。
1条答案
按热度按时间nom7f22z1#
默认情况下,VS Code对可以加载的内容有很大的限制。添加内容安全策略以实现更多功能。下面是我用来允许加载外部资源的代码:
字符串