如何通过 Blazor WebAssembly 写入浏览器的控制台?
How can I write into the browser´s console via Blazor WebAssembly?
在 JavaScript 中,我们可以使用以下调用将调试输出写入浏览器的控制台:
console.log("My debug output.");
Google中的输出Chrome:
如何通过 Blazor WebAssembly 将组件中的 "My debug output" 记录到浏览器的控制台?
<button @onclick="ClickEvent">OK</button>
@code {
private void ClickEvent()
{
// console.log("My debug output.");
}
}
我经常这样做:
Console.WriteLine("My debug output.");
如果是 Blazor WebAssembly,我会在浏览器的控制台中看到消息。
如果是 Blazor Server App,我会在输出中看到消息 window。 (在输出 window 中,有一个下拉菜单 - select: " ASP.NET Core Web Server")
希望这对您有所帮助...
您可以使用 ILogger<T>
使您可以在控制台中写入警告或错误:
@using Microsoft.Extensions.Logging
@inject ILogger<MyComponent> _logger
...
@code {
protected override void OnInitialized()
{
_logger.LogWarning("warning");
_logger.LogError("error");
}
}
如果您使用 Blazor Server(而非 WebAssembly),您只能使用 JSInterop 写入浏览器控制台。我像这样写了一个包装器 class:
public class JsConsole
{
private readonly IJSRuntime JsRuntime;
public JsConsole(IJSRuntime jSRuntime)
{
this.JsRuntime = jSRuntime;
}
public async Task LogAsync(string message)
{
await this.JsRuntime.InvokeVoidAsync("console.log", message);
}
}
然后在您的页面中,您可以注入 JsConsole 并使用它:
await this.JsConsole.LogAsync(message); //Will show in the browser console.
对于 Blazor Server,您只需注入 JS 运行时,然后就可以在 .razor 文件中像这样访问它:
@inject IJSRuntime JS
...
@code {
protected override async void OnInitialized()
{
await JS.InvokeVoidAsync("console.log","loaded");
}
}
有关从 Blazor 调用 JS 函数的更多信息:https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-6.0
基于@Greg Gum 的回答,javascript 的 console.log()
也可以接受任何对象。因此,如果你向它发送一个对象,你将得到一个很好的完整对象输出作为一个 javascript 对象,而不仅仅是一个字符串。
public class JsConsole
{
private readonly IJSRuntime JsRuntime;
public JsConsole(IJSRuntime jSRuntime)
{
this.JsRuntime = jSRuntime;
}
//change this parameter to object
public async Task LogAsync(object message)
{
await this.JsRuntime.InvokeVoidAsync("console.log", message);
}
}
在 JavaScript 中,我们可以使用以下调用将调试输出写入浏览器的控制台:
console.log("My debug output.");
Google中的输出Chrome:
如何通过 Blazor WebAssembly 将组件中的 "My debug output" 记录到浏览器的控制台?
<button @onclick="ClickEvent">OK</button>
@code {
private void ClickEvent()
{
// console.log("My debug output.");
}
}
我经常这样做:
Console.WriteLine("My debug output.");
如果是 Blazor WebAssembly,我会在浏览器的控制台中看到消息。
如果是 Blazor Server App,我会在输出中看到消息 window。 (在输出 window 中,有一个下拉菜单 - select: " ASP.NET Core Web Server")
希望这对您有所帮助...
您可以使用 ILogger<T>
使您可以在控制台中写入警告或错误:
@using Microsoft.Extensions.Logging
@inject ILogger<MyComponent> _logger
...
@code {
protected override void OnInitialized()
{
_logger.LogWarning("warning");
_logger.LogError("error");
}
}
如果您使用 Blazor Server(而非 WebAssembly),您只能使用 JSInterop 写入浏览器控制台。我像这样写了一个包装器 class:
public class JsConsole
{
private readonly IJSRuntime JsRuntime;
public JsConsole(IJSRuntime jSRuntime)
{
this.JsRuntime = jSRuntime;
}
public async Task LogAsync(string message)
{
await this.JsRuntime.InvokeVoidAsync("console.log", message);
}
}
然后在您的页面中,您可以注入 JsConsole 并使用它:
await this.JsConsole.LogAsync(message); //Will show in the browser console.
对于 Blazor Server,您只需注入 JS 运行时,然后就可以在 .razor 文件中像这样访问它:
@inject IJSRuntime JS
...
@code {
protected override async void OnInitialized()
{
await JS.InvokeVoidAsync("console.log","loaded");
}
}
有关从 Blazor 调用 JS 函数的更多信息:https://docs.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-6.0
基于@Greg Gum 的回答,javascript 的 console.log()
也可以接受任何对象。因此,如果你向它发送一个对象,你将得到一个很好的完整对象输出作为一个 javascript 对象,而不仅仅是一个字符串。
public class JsConsole
{
private readonly IJSRuntime JsRuntime;
public JsConsole(IJSRuntime jSRuntime)
{
this.JsRuntime = jSRuntime;
}
//change this parameter to object
public async Task LogAsync(object message)
{
await this.JsRuntime.InvokeVoidAsync("console.log", message);
}
}