Blazor University (39)JavaScript 互操作 —— 更新 document title

原文链接:https://blazor-university.com/javascript-interop/calling-javascript-from-dotnet/updating-the-document-title/

更新 document title

源代码[1]

在创建 Blazor 布局[2]部分中,我们看到了 Blazor 应用程序如何存在于 HTML(或 cshtml)文档中,并且只能控制主应用程序元素中的内容。

da589e17bf0e6c612ee06fe80add18da.png

不是单页应用程序的网站可以通过在 <head> 部分中添加 <title> 元素来指定要在浏览器选项卡中显示的文本,但我们的 Blazor 应用程序实际上并不导航到不同的服务器页面,因此它们都有与我们的应用程序启动时加载的文档标题相同。

我们现在将使用一个新的 <Document> 组件来解决这个问题,该组件将使用 JavaScript 互操作来设置 document.title,这将反映在浏览器的选项卡中。我们将其创建为 Blazor 服务器应用程序;它可以很容易地在可重用的组件库中创建,但我将把它作为练习留给你。

创建一个新的 Blazor 服务器应用程序,然后在 wwwroot 文件夹中创建一个 scripts 文件夹,并在其中使用以下脚本创建一个名为 DocumentInterop.js 的脚本。

var BlazorUniversity = BlazorUniversity || {};
BlazorUniversity.setDocumentTitle = function (title) {document.title = title;
};

这将创建一个名为 BlazorUniversity 的对象,该对象具有一个名为 setDocumentTitle 的函数,该函数接受一个新标题并将其分配给 document.title

接下来,编辑 /Pages/_Host.cshtml 文件并添加对我们新脚本的引用。

<script src="_framework/blazor.server.js"></script>
<script src="~/scripts/DocumentInterop.js"></script>

最后,我们需要 Document 组件本身。在 /Shared 文件夹中创建一个名为 Document.razor 的新组件并输入以下标记。

@inject IJSRuntime JSRuntime
@code {[Parameter]public string Title { get; set; }protected override async Task OnParametersSetAsync(){await JSRuntime.InvokeVoidAsync("BlazorUniversity.setDocumentTitle", Title);}
}

这段代码有一个故意的错误。运行应用程序,您将在调用 JSRuntime.InvokeVoidAsync 的行上看到 NullReferenceException

原因是 Blazor 在将控制权交给客户端之前在服务器上运行预渲染阶段。此预渲染的目的是从服务器返回有效的渲染 HTML,以便

  • 网络爬虫,例如谷歌,可以索引我们的网站。

  • 用户立即看到结果。

这里的问题是,当预渲染阶段运行时,没有浏览器可供 JSRuntime 进行互操作。可能的解决方案是

  1. 编辑 /Pages/_Host.cshtml 并将 <component type="typeof(App)" render-mode="ServerPrerendered" /> 更改为 <component type="typeof(App)" render-mode="Server"/>

优点: 一个简单的修复。

缺点: 谷歌等在访问我们网站的页面时不会看到任何内容。

  1. 重写 OnAfterRenderAsync 而不是 OnParametersSetAsync

#2是解决问题的正确方法。

@inject IJSRuntime JSRuntime
@code {[Parameter]public string Title { get; set; }protected override async Task OnAfterRenderAsync(bool firstRender){if (firstRender)await JSRuntime.InvokeVoidAsync("BlazorUniversity.setDocumentTitle", Title);}
}

正如在 JavaScript 启动过程一节中所解释的,当服务器在发送网站之前预渲染网站时,客户端浏览器将在没有任何 JavaScript 的情况下渲染 App 组件。只有在浏览器中呈现 HTML 后,才会调用 OnAfterRender* 方法并将 firstRender 设置为 true

使用新的 Document 组件

编辑 /Pages 文件夹中的每个页面,并添加我们的新元素 <Document Title="Index"/> - 但显然您希望在浏览器的选项卡中显示正确的文本。

参考资料

[1]

源代码: https://github.com/mrpmorris/blazor-university/tree/master/src/JavaScriptInterop/UpdatingDocumentTitle

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS 日志文件位置

IIS 6 Log files location IIS 6中日志文件的位置%windir%\System32\LogFilesIIS 7 Log files location IIS的日志文件的位置%SystemDrive%\inetpub\logs\LogFiles用户每打开一次网页&#xff0c;iis 都会记录用户IP、访问的网页地址、访问时间、访问状态等信息&#xff0c;这些…

APP测试流程和测试点

1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间&#xff0c;一般测试时间为两三周&#xff08;即15个工作日&#xff09;&#xff0c;根据项目情况以及版本质量可适当缩短或延长测试时间。正式测试前先向主管确认项目排期。 1.3测试资源 测…

39所强基计划试点高校已全部公布招生简章

截至目前(4月8日下午) 39所强基计划试点高校 已全部公布招生简章 各高校招生要求是什么&#xff1f; 招生专业有哪些&#xff1f; 什么时候报名&#xff1f; 一起来看 北京大学 招生对象及报名条件 各省&#xff08;区、市&#xff09;符合2022年全国普通高等学校招生统…

【ArcGIS错误异常100问】之001:License服务无法启动权威解决办法

测试环境&#xff1a; 操作系统&#xff1a;Windows10ArcGIS版本&#xff1a;10.X结果&#xff1a;通过测试 文章目录1. 错误提示2. 问题分析3. 解决办法3.1 关闭Windows Defender3.2 关闭系统防火墙3.3 删除迈克菲&#xff08;McAfee&#xff09;杀毒软件3.4 在系统服务中启动…

ASP.NET Core 技术内幕与项目实战读后感

前几天拿到了杨中科老师的新书《ASP.NET Core 技术内幕与项目实战》&#xff0c;迫不及待的“两”口气读完了。用一句话来总结&#xff0c;这是一本写给.NET开发者的非常实用的接地气的好书&#xff0c;感觉有必要自发为这本书宣传一波。杨老师在 .NET 开发者社区中的知名度非常…

avalon2学习教程15指令总结

avalon的指令在上一节已经全部介绍完毕&#xff0c;当然有的语焉不详&#xff0c;如ms-js。本节主要总结我对这方面的思考与探索。 MVVM的成功很大一语分是来自于其指令&#xff0c;或叫绑定。让操作视图的功能交由形形式式的指令来代劳。VM&#xff0c;成了一个大管家。它只一…

【ArcGIS错误异常100问】之002:Error 000735 简化容差:值是必需的(简化线、简化面工具)

测试环境&#xff1a; 操作系统&#xff1a;windows7ArcGIS版本&#xff1a;10.2结果&#xff1a;通过测试 文章目录1. 错误提示2. 问题分析3. 解决办法4. 问题验证1. 错误提示 在ArcGIS中使用简化面或者简化线工具时&#xff0c;点击确定会提示Error 000735&#xff1a;简化容…

.NET桌面开发的一些思考

在22日&#xff0c;我在公众号上发布了一条短文字&#xff0c;内容如下&#xff1a;其实在.NET开发大军中&#xff0c;还有一股力量&#xff0c;那就是桌面程序的开发者们。他们很少发声&#xff0c;可能技术成熟&#xff0c;可能太企业化了&#xff0c;也可能我没关注到。最近…

【ArcGIS错误异常100问】之003:属性表中文乱码解决办法总结

测试环境&#xff1a; 操作系统&#xff1a;windows7ArcGIS版本&#xff1a;10.X、Pro结果&#xff1a;通过测试 文章目录1. 错误提示2. 原因分析3. 解决方法4. 问题验证1. 错误提示 如图所示&#xff0c;安装完ArcGIS Pro后&#xff0c;由于计算机系统和应用软件字符编码的问…

大型网站架构演化(二)——应用服务和数据服务分离

随着网站业务的发展&#xff0c;一台服务器逐渐不能满足需求&#xff1a;越来越多的用户访问导致性能越来越差&#xff0c;越来越多的数据导致存储空间不足。这时就需要将应用和数据分离。应用和数据分离后整个网站使用三台服务器&#xff1a;应用服务器、文件服务器和数据库服…

再不自动化就晚啦!优云教你4步打造基于CentOS的产品镜像

随着Linux程序的增多&#xff0c;软件的安装过程中经常出现如下问题&#xff1a; 1、硬件配置类似或者相同时&#xff0c;批量安装系统和软件&#xff0c;希望实现自动化安装&#xff0c;减少安装时间和人为出错。 2、工程实施人员在不同客户现场进行系统和软件安装(硬件配置不…

【ArcGIS错误异常100问】之004:ArcGIS表转Excel超了65535限制解决办法

测试环境&#xff1a; 操作系统&#xff1a;windows7ArcGIS版本&#xff1a;10.2 文章目录1. 错误提示2. 原因分析3. 解决方法1. 错误提示 如下图&#xff0c;当矢量shp图斑数目过多&#xff0c;文件超过了65535条记录时&#xff0c;利用ArcGIS的表转Excel工具处理成Excel文件…

[转]硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战

在Redis 缓存击穿&#xff08;失效&#xff09;、缓存穿透、缓存雪崩怎么解决&#xff1f;中我们说到可以使用布隆过滤器避免「缓存穿透」。 码哥&#xff0c;布隆过滤器还能在哪些场景使用呀&#xff1f; 比如我们使用「码哥跳动」开发的「明日头条」APP 看新闻&#xff0c;如…

Senparc.Weixin.Sample.MP源码剖析

Senparc.Weixin.Sample.MP是微信公众号样例的.NET6源码&#xff0c;项目配置文件appsettings.json的修改和微信公众号测试环境的搭建参考&#xff1a;微信公众号调试与Natapp环境搭建。接下来从项目结构&#xff0c;项目应用和项目源码3个角度来进行讲解。一.项目结构角度项目代…

mock.js使用

一、Mock.js入门 1&#xff0e; 什么是mock.js? Mock.js &#xff08;官网http://mockjs.com/&#xff09;是一款模拟数据生成器&#xff0c;旨在帮助前端攻城狮独立 于后端进行开发&#xff0c;帮助编写单元测试。提供了以下模拟功能&#xff1a; 1,根据数据模板生成模拟数据…

【ArcGIS微课1000例】0042:ArcGIS自带取色器工具的妙用

在ArcGIS中作图时,通常要进行颜色对照填充,输入特定的RGB值,本文介绍ArcGIS自带取色器工具的妙用,及第三方颜色拾取工具。 文章目录 一、ArcGIS自带取色器二、第三方取色器工具一、ArcGIS自带取色器 很多人可能不知道,ArcGIS中自带取色器工具,如下图所示。 当然了,自带…

微信.NET SDK-Senparc资料整理

微信生态系统包括微信公众号、小程序、微信支付、微信开放平台、企业微信、小游戏等&#xff0c;官方提供了很多的API接口。Senparc是目前使用最广泛的微信.NET SDK&#xff0c;同时支持支持.NET Framework 4.5/.NET Core 2.x/.NET Core 3.x/.NET 5/.NET 6。由于在微信生态开发…

7 种提升 Spring Boot 吞吐量神技

目录 二、增加内嵌Tomcat的最大连接数 三、使用ComponentScan()定位扫包比SpringBootApplication扫包更快 四、默认tomcat容器改为Undertow&#xff08;Jboss下的服务器&#xff0c;Tomcat吞吐量5000&#xff0c;Undertow吞吐量8000&#xff09; 五、使用 BufferedWriter 进…

【ArcGIS微课1000例】0043:ArcGIS缩略图的创建及应用

缩略图通常出现在地图文档中&#xff0c;便于在启动页面中快速打开指定的地图文档&#xff0c;提高效率。 文章目录一、缩略图预览二、缩略图创建一、缩略图预览 打开ArcMap软件&#xff0c;弹出启动窗口&#xff0c;在最近打开的文档中&#xff0c;可以看到两类&#xff0c;一…

JSP简单登录系统

Login登陆界面 <body> 登陆 <% session.invalidate();%> <form action"TestPW.jsp" method"post">用户名<input type"text" name"username"> 密码<input type"password" name"password&quo…