NodeJS localhost在我的远程VS Code的webviews中不起作用

mqkwyuun  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(141)

我正在尝试实现自己的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解决方案。这只是一个链接到已知的网站。

nom7f22z

nom7f22z1#

默认情况下,VS Code对可以加载的内容有很大的限制。添加内容安全策略以实现更多功能。下面是我用来允许加载外部资源的代码:

<meta http-equiv="Content-Security-Policy" content="default-src *; img-src http: https:;
    script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'unsafe-inline' http: https: data: *;">

字符串

相关问题