论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
Blazor 调用 Clipboard API 读写剪贴板数据
Blazor 调用 Clipboard API 读写剪贴板数据
惊落一身雪
金牌会员
|
2024-10-14 16:23:01
|
显示全部楼层
|
阅读模式
楼主
主题
851
|
帖子
851
|
积分
2553
目录
简介
使用JS互操作
使用ClipLazor库
创建项目
使用方法
简单测试
参考链接
简介
Clipboard API
是一种允许网页读取剪贴板数据或向其中写入数据的API,重要有两个方法:
navigator.clipboard.writeText()
:用于将文本写入剪贴板。
navigator.clipboard.readText()
:用于从剪贴板读取文本。
网上相干的文章基本上都是直接使用 Blazor 的JS互操作特性来实现功能 ,本文除了
JS互操作
还介绍了使用
ClipLazor
库实现功能的方法,使用第三方库代码会更简洁一点。
使用JS互操作
JS调用 Clipboard API的代码如下,代码可以直接放到 razor 页面中:
[/code]在 Razor 组件中注入 JSRuntime,并调用该JS:
[code]@* 注入 IJSRuntime 实例,用于和 JavaScript 进行交互 *@
@inject IJSRuntime JsRuntime
// 该方法用于将文本异步复制到剪贴板
private async Task CopyTextToClipboard(string txt)
{
await JsRuntime.InvokeVoidAsync("clipboardCopy.copyText", txt);
}
复制代码
使用ClipLazor库
ClipLazor 是一个库,它为 Blazor 应用步伐中的
Clipboard API
提供互操作,本质上是对JS互操作进行了封装。
创建项目
新建一个 Blazor Web App 项目,开辟框架选择 .NET8,在 Client 项目中通过 NuGet 添加 ClipLazor 依赖项。
在
Program.cs
文件中,使用 AddClipboard 方法将服务注册到 IoC 容器,
服务端和客户端项目都必要添加
:
using ClipLazor.Extention;
//...
builder.Services.AddClipboard();
//...
复制代码
在服务端项目标
App.razor
文件中添加此脚本标记:
[/code][size=5]使用方法[/size]
Blazor Web App项目模板把办理方案分成了服务端、客户端两个项目,有交互操作的页面都必要放在客户端项目中,将 Clipboard 注入到 razor 文件中:
[code]@using ClipLazor.Components;
@using ClipLazor.Enums;
@inject IClipLazor Clipboard
复制代码
检查浏览器是否支持 Clipboard API:
bool isSupported = default;
bool isWritePermitted = default;
bool isReadPermitted = default;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
// 静态渲染期间无法进行js互操作,所以必须在这个周期点执行
if (firstRender)
{
isSupported = await Clipboard.IsClipboardSupported();
isWritePermitted = await Clipboard.IsPermitted(PermissionCommand.Write);
isReadPermitted = await Clipboard.IsPermitted(PermissionCommand.Read);
}
}
复制代码
简单的复制粘贴文本的操作方法:
string msg = string.Empty;
string txt = string.Empty;
string pastedTxt = string.Empty;
async void CopyTxt(string txt)
{
if (txt.Length > 0 && isSupported)
{
if (isWritePermitted)
{
var isCopied = await Clipboard.WriteTextAsync(txt.AsMemory());
if (isCopied)
{
msg = "Text Copied";
}
else
{
msg = "Couldn't copy the text!.";
}
}
StateHasChanged();
}
}
async void PasteTxt()
{
if (isSupported && isWritePermitted)
{
var pastedText = await Clipboard.ReadTextAsync();
if (pastedText is not null)
{
msg = "Text Pasted";
pastedTxt = pastedText;
}
else
{
msg = "Couldn't paste the text!.";
}
}
StateHasChanged();
}
复制代码
实际使用时也支持复制粘贴图像或二进制文件,具体代码可以参考
ClipLazor 库的完整示例
。
简单测试
以客户端项目标
Counter.razor
为例:
@page "/counter"
@rendermode InteractiveAuto
//代码:将 Clipboard 注入 到 razor 文件中
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button @onclick="IncrementCount">Click me</button>
<p role="status">Txt: @txt</p>
<p role="status">Msg: @msg</p>
<p role="status">PastedTxt: @pastedTxt</p>
@code {
//代码:检查浏览器是否支持 Clipboard API
private int currentCount = 0;
private async void IncrementCount()
{
currentCount++;
txt = currentCount.ToString();
CopyTxt(txt);
PasteTxt();
}
//代码:简单的复制粘贴文本的操作方法
}
复制代码
测试结果:
参考链接
ClipLazor README
blazor 复制笔墨到剪贴板
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
惊落一身雪
金牌会员
这个人很懒什么都没写!
楼主热帖
腾讯叶聪:朋友圈爆款背后的计算机视觉 ...
处理接口幂等性的两种常见方案 ...
图文结合带你搞懂InnoDB MVCC
一个故事看懂CPU的SIMD技术
看完这个,还不会DVMA,请你吃瓜 ...
Kubernetes(k8s)CNI(flannel)网络 ...
如何获取iphone的UUID
关于 Java 的简介(评论抽奖送书) ...
聊一聊 TLS/SSL
数据湖选型指南|Hudi vs Iceberg 数据 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表