Blazor University (37)JavaScript 互操作 —— JavaScript 启动过程

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Blazor University (37)JavaScript 互操作 —— JavaScript 启动过程相关的知识,希望对你有一定的参考价值。

原文链接:https://blazor-university.com/javascript-interop/javascript-boot-process/

JavaScript 启动过程

在 Blazor 启动过程中,浏览器将在 Blazor 初始化之前创建 html 文档,这意味着从引导 HTML 引用的任何 JavaScript 都将立即加载,并且在这些 JavaScript 文件中自动执行的任何代码都将在 Blazor 有机会在初始化之前执行。

源代码[1]

要观察这一点,请创建一个新的 Blazor 服务器端应用程序:

  • 编辑 /App.razor

  • 添加以下 OnInitialized 方法。

@code 
  protected override void OnInitialized()
  
    System.Diagnostics.Debug.WriteLine("Blazor initialised: " + DateTime.Now.ToString("mm:ss.fff"));
    base.OnInitialized();
  
  • /wwwroot 文件夹下创建一个名为 scripts 的文件夹

  • 在该文件夹中创建一个名为 JavaScriptBootProcess.js 的文件 -添加以下脚本

const now = new Date();
console.log('JavaScript initialised: ' + now.getMinutes() + ":" + now.getSeconds() + "." + now.getMilliseconds());
  • 编辑 /Pages/_Host.cshtml

  • 找到文本“ServerPrerendered”并将其更改为“Server”

  • 在页面底部附近现有的 <script> 标记下方,添加以下标记

<script src="~/scripts/JavaScriptBootProcess.js"></script>

运行应用程序并查看浏览器的控制台输出和 Visual Studio 的输出窗口。比较输出,我们将看到如下内容:

JavaScript initialised: 15:20.317
Blazor initialised: 15:20.466

由于这种行为,JavaScript 不可能立即调用 .NET 方法。使用 JavaScript 互操作时,我建议尽可能从 Blazor 端启动通信。

ServerPrerendering

如果我们现在编辑同一个项目并将渲染模式更改回 ServerPrerendered,我们将看到如下内容:

Blazor initialised: 42:22.559
JavaScript initialised: 42:22.631
Blazor initialised: 42:22.690

当用户第一次访问我们应用的 URL 时,Blazor 将在浏览器之外呈现 App.razor 组件并将生成的 HTML 发送到浏览器。之后,初始化 JavaScript,最后初始化 Blazor 以供客户端交互。

参考资料

[1]

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

以上是关于Blazor University (37)JavaScript 互操作 —— JavaScript 启动过程的主要内容,如果未能解决你的问题,请参考以下文章

Blazor University (31)表单 —— 验证

Blazor University (27)路由 —— 检测导航事件

Blazor University (26)路由 —— 通过代码导航

Blazor University (45)依赖注入 —— 将依赖项注入 Blazor 组件

Blazor University 组件 — 创建组件

Blazor University (36)组件库