使用 C# + Blazor 开发浏览器扩展

Intro

前段时间听了 Justin 大佬分享的 Blazor 开发浏览器扩展,觉得很不错,C# 可以做更多有趣的事情了,

很多需要在服务器端做的事情可能就可以在客户端里实现了,而且高度可以复用已有的 C# 代码,而且在浏览器里做很多有趣的事情,所以想写一篇文章和大家分享一下,让大家知道 C# 也是可以开发浏览器扩展的

BlazorBrowserExtension

Blazor.BrowserExtension 是一个使用 Blazor 来开发浏览器扩展的开源项目,也是我们要介绍的主角,项目地址是: https://github.com/mingyaulee/Blazor.BrowserExtension,其工作方式是 Blazor WebAssembly 模式来代替 JavaScript 来工作,这个项目依托于作者的另外一个项目 https://github.com/mingyaulee/WebExtensions.Net,WebExtensions.Net 这个项目主要是提供了浏览器扩展和浏览器进行交互的 C# API,而 Blazor.BrowserExtension 项目则是在其基础之上将浏览器扩展的开发模式和 Blazor 相结合,并且借助于 MS Build 自动化地生成浏览器扩展所必需的资源文件,进一步简化 C# 开发浏览器扩展的上手难度

Get Started

如果想要开始一个创建一个浏览器扩展,可以基于项目模板来创建,首先需要安装一下项目模板,通过下面的命令来安装模板

dotnet new --install Blazor.BrowserExtension.Template

然后就可以创建项目了,可以使用下面的命令来基于模板创建项目(替换下面的 <ProjectName> 为自己想要使用的项目名称)

dotnet new browserext --name <ProjectName>

我创建了一个示例项目,名字是 BlazoreWebExtensionDemo

目前项目模板有一个模板参数,可以通过 -F 来指定项目的 TargetFramework,默认是 net5.0,可以指定为 net6.0 来创建 .NET 6 的项目

之后我们切换到项目目录下,使用 dotnet build 来构建项目,build 成功之后就可以在项目的 bin 目录下看到一个 wwwroot 目录了,这个目录就包含了浏览器插件所需的所有文件,此时我们的浏览器插件已经完成了。

接着我们来使用一下我们的浏览器扩展,我们需要在浏览器扩展程序页面(chrome 可以直接访问chrome://extensions/)启用开发者模式才能直接加载本地的浏览器插件,然后点击 “加载已解压的扩展程序”,然后选择我们上面的 wwwroot 目录就可以加载我们的插件了

BlazoreWebExtensionDemo 就是我们前面创建的浏览器插件项目,加载好之后,默认项目的行为是会打开一个 Tab ,如下图所示:

我们也可以通过 VS 来创建项目,可以参考作者提供一个 Gif 演示:

VS demo

Structure

项目结构如下:

可以看到这就是一个 Blazor 项目的项目结构,和普通的 Blazor 项目并没有太大的差别

项目模板会自动生成几个 Page,可以根据自己需要进行修改

  • background(后台页面,通常是后台逻辑)

  • index(默认入口)

  • options(插件上右键时的“选项”对应的页面)

  • popup(插件单击时显示的 Popup 内容)

然后就是 wwwroot 目录下的 manifest.json 文件,这个文件定义了插件的名称、介绍以及插件所需要的权限以及页面配置等信息,关于 manifest.json 的详细信息可以参考文档:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json

运行 dotnet build 之后的结构下:

  • BrowserExtensionScripts: 和浏览器扩展交互的一些 js

  • WebExtensionsScripts:WebExtensions 用来和 js 交互的一些 js

  • framework:Blazor 项目依赖,包括依赖的dotnet webassembly 环境和一些程序集

Further

如果想要做进一步的开发,需要怎么做呢?

如果要在代码里使用浏览器扩展的插件,只需要注入 IWebExtensionsApi 即可,这是在自动生成的 Program.csAddBrowserExtensionService 方法中注册的,详细可以参考: https://github.com/mingyaulee/Blazor.BrowserExtension/blob/main/src/Blazor.BrowserExtension/Extensions/ServiceCollectionExtensions.cs#L25

builder.Services.AddBrowserExtensionServices(options =>
{options.ProjectNamespace = typeof(Program).Namespace;
});

具体的浏览器扩展 API 可以参考 MDN 和 Chrome 浏览器扩展的 API 文档以及 Google 提供的 samples https://github.com/GoogleChrome/chrome-extensions-samples

我也尝试做了一个简单的浏览器插件,做了一个简单的 todo 提醒,只用到了一个 notification 的 API,数据的管理是基于 EF Core In Memory 来实现的,和之前的 API 实现了一些简单的代码共享,有需要的可以参考 https://github.com/WeihanLi/SparkTodo/tree/master/SparkTodo.WebExtension,功能演示可以参考下图:

SparkTodo Web Extension

More

可以关注支持一下这个基于 Blazor 的浏览器扩展项目 https://github.com/mingyaulee/Blazor.BrowserExtension

如果想要开发一个自己的浏览器插件,很多时候可能只是要熟悉一下浏览器扩展的 API 怎么用,可以参考 Google 提供的一系列 chrome extension 的示例,API 基本上应该都是一样的,而且 C# 的 API 是强类型的,可能会更加友好和方便维护,一些在服务器端做的事情可以转移到客户端去做了,可以使用 C# 在浏览器端实现更多有趣的事情了。快去用 C# 开发浏览器扩展吧~

Justin 大佬最近在做的浏览器扩展项目地址是 https://github.com/newbe36524/Amazing-Favorites,感兴趣的可以关注一下,另外大佬之前的分享示例代码可以参考https://github.com/newbe36524/Newbe.Demo/tree/master/src/BlogDemos/Newbe.Blazor。

References

  • https://github.com/mingyaulee/Blazor.BrowserExtension

  • https://github.com/newbe36524/Amazing-Favorites

  • https://github.com/mingyaulee/WebExtensions.Net

  • https://github.com/WeihanLi/SparkTodo/tree/master/SparkTodo.WebExtension

  • https://github.com/WeihanLi/SamplesInPractice/tree/master/BlazorSample/BlazorWebExtensionDemo

  • https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Build_a_cross_browser_extension

  • https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions

  • Chrome Extensions API Reference

  • https://github.com/GoogleChrome/chrome-extensions-samples

使用 C# 开发浏览器扩展相关推荐

  1. 5分钟学会开发浏览器扩展

    写在前面 做web开发的同学,经常会用到各种chrome浏览器插件,那么我们寄几怎么开发一个插件呢(其实是浏览器扩展)?其实很简单,你意想不到的简单.只要有web开发基础,会写基本的html,css和 ...

  2. 开发浏览器插件/扩展应用开发

    今天尝试了下开发浏览器扩展,在Microsoft Edge浏览器上测试的,其他的也类似. 目录: 配置: // manifest.json{"name": "ADKILL ...

  3. 分享一个实现夜间模式的浏览器扩展

    最近花了些时间,做一个浏览器上实现夜间模式的扩展.目前已在谷歌.火狐.360浏览器中上架,从浏览器扩展/附加组件中搜索"夜间助手"即可安装使用. 一些演示 为什么要做这个扩展? 就 ...

  4. 开发FireFox浏览器扩展(Extension)并实现与原生应用之间的消息传递

    一.什么是插件(Plug-in),什么是扩展(Extension). 插件指的是在页面HTML源代码里通过<object> 或者 <embed> 标签声明的部分,工作在内核层面 ...

  5. 常见浏览器扩展开发笔记(chrome firefox 360 baidu qq sougou liebao uc opera)

    浏览器扩展开发貌似时下很冷门啊,但是不少企业还是有类似的应用,360的抢票插件啊,笔者最近在做的网页翻译扩展之类的.笔者在开发的过程中,遇到了不少坑,说是坑,说白了就是各个厂商支持的API不统一导致的 ...

  6. Firefox(火狐)浏览器扩展开发初探

    最近开发一个FF的扩展,自动完成公司的订餐操作,主要完成的功能很简单:登陆网站,执行一个特定操作,并在ff的状态栏内显示执行的成功或者失败的状态.以前没有写过FF扩展,需要从头学习,在完成这个扩展过程 ...

  7. Chrome浏览器扩展开发之自动化操作页面

    Chrome浏览器支持扩展(Extension)开发,来定制扩展现有的功能,如:自动登录,定时刷新,抢票等功能,本文以一个简单的小例子,简述Google Chrome 扩展开发的基本步骤,仅供学习分享 ...

  8. 浏览器扩展开发系列教程(一)

    以谷歌内核的浏览器扩展,包括 edge chrome ,还有我们常用的国产浏览器都能使用 浏览器扩展是一种软件,以增强Chrome内核浏览器的功能.浏览器扩展使用HTML.JavaScript.CSS ...

  9. 独立开发变现周刊(第69期):语音转录浏览器扩展插件,一年获取20倍增长

    分享独立开发.产品变现相关内容,每周五发布. 目录 1.JenniAI: 用最先进的自动完成功能来增强你的写作能力. 2.wx_lover:微信公众号情侣消息推送 3.Xnapper: MacOS应用 ...

最新文章

  1. 学习UI设计能做什么
  2. Alpha 冲刺 —— 十分之八
  3. poj 1948(搜索+剪枝)
  4. ab flash player 8_ROM、RAM、DRAM、SRAM和FLASH的区别是什么?
  5. SQL SERVER中一些常见性能问题的总结
  6. OpenStack tokens id获取测试
  7. vue实现监听滚动条
  8. 最后2天,错过等1年,这7本计算机经典图书竟然打折了!
  9. 计算机组成原理闭卷,《计算机组成原理》试卷A (闭卷)
  10. 程序员 论坛 linux,用了五年Linux,三分钟带你揭开Linux过程内幕
  11. 3D版pix2pix来了,画一只猫就能抱起来吸丨github
  12. 2021年了,对话系统凉透了吗?
  13. 基于MATLAB绘制双纵坐标轴图
  14. 手机开热点但是电脑一直连接不上_电脑连接手机热点无法上网的三种解决方法...
  15. 2022-2028年中国网络直播行业商业模式创新与投资机会深度研究报告
  16. 在PPT上使用开发工具的不同控件实现单选操作
  17. 动态规划 - 切钢条 (python)
  18. 蓝牙BLE方案|智能穿戴市场持续火热,伦茨科技推出智能手表方案
  19. python协程多任务爬取虎牙美女主播图片
  20. 读stormzhang的笔记

热门文章

  1. Css3: gradient背景渐变
  2. 基于GDAL库,读取海洋风场数据(.nc格式)c++版
  3. Linux基础命令---findfs
  4. 《构建之法》 读书笔记
  5. Hive学习之路 (一)Hive初识
  6. porting linux
  7. 世界顶级精英们的人生哲学 【转】
  8. win10任务栏和开始菜单_如何将网站固定到Windows 10任务栏或开始菜单
  9. 为什么要使用React Hooks?(5分钟实例)
  10. pandas所占内存释放