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.pswp.cn/news/284350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284350.shtml
英文地址,請注明出處:http://en.pswp.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 在系統服務中啟動…

Appium wait等待的三種方法

1、sleep()方法Thread.sleep&#xff08;60000&#xff09;強制等待60s2、隱式等待implicitlyWait()driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);全局等待30s不管元素是否已經加載1) 當使用了隱式等待執行測試的時候&#xff0c;如果WebDriver沒有在DOM中…

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;簡化容…

mybatis中mysql轉義講解

本文為博主原創&#xff0c;未經允許不得轉載&#xff1a; 在mybatis中寫sql的時候&#xff0c;遇到特殊字符在加載解析的時候&#xff0c;會進行轉義&#xff0c;所以在mybatis中 寫sql語句的時候&#xff0c;遇到特殊字符進行轉義處理。 需要注意的是&#xff0c;轉義的字符為…

用Python執行js文件代碼并獲取返回結果

js代碼&#xff08;myjs.js&#xff09;&#xff1a; /** Title: This is a file for ……* Author: JackieZheng* Date: 2022-04-12 09:24:13* LastEditTime: 2022-04-12 09:40:55* LastEditors: Please set LastEditors* Description:* FilePath: myjs.js*/function hello(…

.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個角度來進行講解。一.項目結構角度項目代…

解決java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor問題

hibernate整合spring當在spring配置文件中加入如下代碼 <!--2.配置事務屬性,需要事務管理器--><tx:advice id"txAdvice" transaction-manager"transactionManager"><tx:attributes><tx:method name"get*" read-only"t…

Packagist / Composer 中國全量鏡像

Packagist / Composer中國全量鏡像 本鏡像共緩存了 186695 個項目(package)、Millions 個(zip)安裝包。最后同步時間&#xff1a;2018/1/28 上午11:01:13 。Composer 最新版本&#xff1a;1.6.2 立即使用 贊助 Packagist 鏡像使用方法 還沒安裝 Composer 嗎&#xff1f;請往…

mock.js使用

一、Mock.js入門 1&#xff0e; 什么是mock.js? Mock.js &#xff08;官網http://mockjs.com/&#xff09;是一款模擬數據生成器&#xff0c;旨在幫助前端攻城獅獨立 于后端進行開發&#xff0c;幫助編寫單元測試。提供了以下模擬功能&#xff1a; 1,根據數據模板生成模擬數據…