visual-studio-code - JS内容未在vscode webview中加载
问题描述
我正在开发我的第一个 vscode 扩展。尝试创建 webview 并在 vscode 编辑器中打开网页。
案例 1:我使用带有沙盒属性的 iframe。当我尝试加载在本地运行的http站点时,我可以看到 js 内容没有在 webview 中加载。
const panel = vscode.window.createWebviewPanel(
'Editor',
'Editor',
vscode.ViewColumn.One,
{
enableScripts: true
}
);
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">
</head>
<body>
<iframe src="http://localhost:8988" sandbox="allow-scripts" width="100%" height="400px"></iframe>
</body>
</html>`;
}
案例2:
- 我还尝试打开 https 站点,
https://cssgradient.io/
. 在该站点中,也没有加载 js 内容。
注意:控制台中没有错误日志。
如果我遗漏了什么,你能告诉我吗?
解决方案
如果您可以查看控制台日志(通过使用命令:)Open Webview Developer Tools
,您可能会看到一些安全错误,如下所示。
拒绝框架“http://127.0.0.1:3000/”,因为祖先违反了以下内容安全策略指令:“frame-ancestors *
拒绝显示文档,因为 X-Frame-Options 禁止显示。
因此,您需要更改特定的内容安全策略才能将您的域加载到 iframe 中。
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-src
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors
就我而言,它在更新frame-src
CSP 策略后起作用。
推荐阅读
- sql - 如何从 SQL Server 中的另一个 ID 和日期列表中查询匹配 ID 和日期的数据?
- javascript - 在 contentEditable 上使用元素需要两次单击才能进行第一次编辑
- javascript - 如果表是使用 Thymeleaf 制作的,如何使用 jquery 获取表的第一个单元格的内容
- javascript - 求模函数的周期性
- sql - Oracle 查询超时
- laravel-5 - Laravel 5:使用会话测试返回重定向
- go - Why is `math.Sin` disallowed in a Go constant?
- html - 使用背景图像时如何链接一些东西:url
- javascript - 容器、行、列 - 在 React-Bootstrap 中不起作用
- java - 短期项目:电子产品库存