当前位置: 首页 > news >正文

北京手机网站建设外包江苏网页设计

北京手机网站建设外包,江苏网页设计,站内营销推广方式,四合一做网站本文作者为 360 奇舞团前端开发工程师 介绍 VSCode 是一个非常强大的代码编辑器,而它的插件也非常丰富。在开发中,我们经常需要自己编写一些插件来提高开发效率。本文将介绍如何开发一个 VSCode 插件,并在其中使用 Webview 技术。首先介绍一下…

本文作者为 360 奇舞团前端开发工程师

介绍

VSCode 是一个非常强大的代码编辑器,而它的插件也非常丰富。在开发中,我们经常需要自己编写一些插件来提高开发效率。本文将介绍如何开发一个 VSCode 插件,并在其中使用 Webview 技术。首先介绍一下什么是Webview。

什么是 Webview?

Webview 是一种可以在 VS Code 中嵌入 Web 内容的技术。通过 Webview,开发者可以将自己的 Web 应用程序嵌入到 VS Code 中,以便在工具中执行各种任务。Webview 提供了一个 Web 浏览器的环境,可以在其中加载 HTML、CSS 和 JavaScript,从而实现各种功能。Webview 还提供了一个 API,使得开发者可以从 Web 应用程序中与 VS Code 进行交互。webview API为开发者提供了完全自定义视图的能力,Webview也能用于构建比VS Code原生API支持构建的更加复杂的用户交互界面。可以把webview看成是VS Code中的iframe,它可以渲染几乎全部的HTML内容,它通过消息机制和插件通信。这样的自由度令我们的webview非常强劲并将插件的潜力提升到了新的高度。接下来我们一起来学习。

1. 创建一个空的 VSCode 插件

首先,我们借助脚手架yomen和generator-code来快速生成项目框架:安装依赖

npm install -g yo generator-code

初始化一个 VS Code插件项目

yo code? What type of extension do you want to create? New Extension (TypeScript)? What's the name of your extension? HelloWorld? What's the identifier of your extension? helloworld? What's the description of your extension? HelloWorld? Initialize a git repository? No? Which package manager to use? npm等待安装依赖完成code ./helloworld

以下为初始化的项目结构

d6c0adbad77188a9e28f91cd4c74cf4b.png

2. 在插件中创建一个 Webview

在插件中创建一个 Webview,需要使用 vscode 模块中的 window.createWebviewPanel 方法。该方法需要传入一个唯一标识符、标题、视图类型和展示位置等参数。例如:

import * as vscode from 'vscode';
export function activate(context: vscode.ExtensionContext) {let disposable = vscode.commands.registerCommand('Hello-World.helloWorld', () => {let panel = vscode.window.createWebviewPanel('myWebview', // 标识符,需要唯一'My Webview', // 标题vscode.ViewColumn.One, // 第一列{});// 设置HTML内容panel.webview.html = getWebviewContent();});context.subscriptions.push(disposable);
}

3. 在 Webview 中加载 HTML 页面

在插件中创建 Webview 后,需要使用 webview.html 属性加载一个 HTML 页面。例如:

function getWebviewContent() { return `<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Hello Webview</title></head><body><h1>Hello Webview!</h1></body></html>`;
}

完成后进入 VS Code,按下F5,你会立即看到一个插件打开主机窗口,其中就运行着插件。在命令面板(Ctrl+Shift+P)中输入Hello World命令,可以看到如下效果。

bb03508ccacab63ef952f04bf313774a.gif

4. 给webview动态传值更新webview的内容

这里引用官方的例子

/*** 4 webview* 可以给webview传值,动态改变内容的webview*/const cats = {'Coding Cat': 'https://media.giphy.com/media/JIX9t2j0ZTN9S/giphy.gif','Compiling Cat': 'https://media.giphy.com/media/mlvseq9yvZhba/giphy.gif'};let disposable = vscode.commands.registerCommand('Hello-World.helloWorld', () => {const panel = vscode.window.createWebviewPanel('myWebview', // 标识符,需要唯一'My Webvie', // 标题vscode.ViewColumn.One, //  第一列{} // webview其他的选项);let iteration = 0;const updateWebview = () => {const cat = iteration++ % 2 ? 'Compiling Cat' : 'Coding Cat';panel.title = cat;panel.webview.html = getWebviewContent(cat);};// 设置初始化内容updateWebview();// 每秒更新内容setInterval(updateWebview, 1000);context.subscriptions.push(disposable);
function getWebviewContent(cat: keyof typeof cats) {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><img src="${cats[cat]}" width="300" /></body></html>`;
}

那么如何与 VS Code 进行交互?

Webview 与 VS Code 之间的交互是通过 Webview 的 API 进行的。通过 API,开发者可以从 Webview 中向 VS Code 发送消息,并从 VS Code 中接收消息。

在 Webview 中,可以使用 vscode.postMessage 方法向 VS Code 发送消息:

1. 在 Webview 中调用插件 API

为了让 Webview 能够与插件交互,需要在 Webview 中使用 acquireVsCodeApi 方法获取一个 vscode 对象,并将其传递给 JavaScript,以便在 JavaScript 中调用插件 API。例如

const vscode = acquireVsCodeApi();vscode.postMessage({command: 'showMessage',text: 'Hello from Webview!'});

2. 在插件中监听 Webview 的消息

在 VS Code 中,可以通过监听 WebviewPanel.onDidReceiveMessage 事件来接收来自 Webview 的消息。例如:

webview.onDidReceiveMessage(message => {switch (message.command) {case 'showMessage':vscode.window.showInformationMessage(message.text);break;}});

下面我们来实现一个具体的demo,来看下webview与vscode 之间的交互:

import * as vscode from 'vscode';export function activate(context: vscode.ExtensionContext) {// 创建 Webview 面板const panel = vscode.window.createWebviewPanel('myWebview', // 面板 ID'My Webview', // 面板标题vscode.ViewColumn.One, // 显示位置{ enableScripts: true } // 启用 JavaScript);// 在 Webview 中加载 HTML 页面panel.webview.html = getWebviewContent();;// 监听 Webview 发送的消息panel.webview.onDidReceiveMessage(message => {if (message.type === 'buttonClick') {// 在 VS Code 中显示提示框vscode.window.showInformationMessage('Button clicked in Webview!');}});// 在 VS Code 中注册命令let disposable = vscode.commands.registerCommand('Hello-World.helloWorld', () => {// 向 Webview 发送消息panel.webview.postMessage({ type: 'showButton' });});context.subscriptions.push(disposable);}function getWebviewContent() {return `<html><body><button id="myButton">Click me</button><script>const vscode = acquireVsCodeApi();const myButton = document.getElementById('myButton');myButton.addEventListener('click', () => {vscode.postMessage({ type: 'buttonClick' });});</script></body></html>`;}

下图为 点击 按钮之后的效果。


27631506867715c3c968a9c852482a2b.png

在这个示例中,我们创建了一个 Webview 面板,并在其中加载了一个简单的 HTML 页面,其中包含一个按钮。当用户点击该按钮时,我们向 VS Code 发送了一个消息,并在 VS Code 中显示了一个提示框。在 VS Code 中,我们还注册了一个命令 Hello-World.helloWorld,当用户执行该命令时,我们向 Webview 发送了一个消息,以便在 Webview 中显示按钮。

通过 Webview,我们可以在 VS Code 和 Web 应用程序之间进行双向通信,从而实现各种功能。

结论

通过以上步骤,我们可以创建一个带有 Webview 的 VSCode 插件,并在其中使用 Webview 技术。Webview 可以让我们在插件中嵌入交互式的 HTML 页面,从而提高开发效率和用户体验。而且通过 Webview,开发者可以将自己的 Web 技能应用于 VS Code 插件开发中,并实现各种功能。

参考来源

https://code.visualstudio.com/docs

‍https://code.visualstudio.com/api/get-started/your-first-extension

https://code.visualstudio.com/api/references/vscode-api#window.createWebviewPanel

- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

662b79d6c2dbcd9d1b47f2e2942b9c2b.png

http://www.fp688.cn/news/159113.html

相关文章:

  • 公司网站备案需要什么材料建设企业网站多少钱
  • 网站建设工作 方案可以推广发广告的app
  • 局域网搭建惠州seo招聘
  • 苏州做网站公司什么是seo
  • 深圳网站建设html5seo搜索引擎优化知乎
  • 可以进入的网站网站推广的平台
  • 个人网站建设好之后怎么赚钱百度手机浏览器
  • 一个公司可以做多少网站广东网站seo策划
  • 中央政府网站的建设的意见竞价推广托管公司介绍
  • 天津网站优化步骤短信营销
  • 域名和网站建站公司链接营销qq官网
  • 全国做网站哪家好合肥seo按天收费
  • 医疗wordpressseo外链要做些什么
  • 网站开发与维护是干什么的seo网站优化服务商
  • 建设400官方网站爱站网关键词查询
  • 做网站电脑需要配置很好吗seo搜索优化邵阳
  • 如何建设一个自己的网站班级优化大师app
  • wordpress 企业网站主题百度搜索推广采取
  • 网站的交互怎么做引擎优化是什么意思
  • 珠海建网站杭州网站建设
  • 阜阳哪里有做网站的怎么注册自己的网站
  • 郑州网站优化方案扬州百度关键词优化
  • 技术支持 东莞网站建设bmapgmapseo效果最好的是
  • wordpress如何添加备案号seo管理是什么
  • asp网站开发技术背景介绍竞价排名适合百度吗
  • 男生做污污的网站浙江百度代理公司
  • ipv6网站如何做网店推广方法有哪些
  • 做网站需要申请商标哪些类目电商运营推广的方式和渠道有哪些
  • 三站合一 网站建设哈尔滨网络优化公司有哪些
  • 资讯型电商网站优缺点外贸网站外链平台