У меня проблемы с медленной загрузкой моей страницы. Я обнаружил, что в консоли отладки на Firefox есть ошибка No .NET call dispatcher has been set.
, однако в Chrome я не вижу этой ошибки.
Я предполагаю, что это связано с моим использованием Java скрипт взаимодействует с моей C# службой.
Что меня больше всего беспокоит, так это то, что страница загружается и файл сценария java работает. Сетки и так далее изменяют размеры соответственно. Возможно, это говорит о том, что я неправильно добавляю в свой сервис или ссылаюсь на файл сценария java в неправильном месте, но я не уверен.
Мой сервис изменения размера зарегистрирован как ограниченный, и я внедряю его в страницы бритвы. это нужно У каждой страницы есть подписчик и метод удаления, вызываемый при создании или уничтожении этой бритвенной страницы / компонента.
Служба изменения размера браузера C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.JSInterop;
using StudyMate.Models.Models;
namespace StudyMate.Client.Services
{
public class BrowserResizeService
{
private readonly IJSRuntime _JSRuntime;
public event Action OnResize;
private static BrowserResizeService _instance = null;
public BrowserResizeService(IJSRuntime js)
{
_JSRuntime = js;
_instance = this;
}
[JSInvokable]
public static void OnBrowserResize()
{
_instance?.OnResize?.Invoke();
}
public async Task<BrowserDimension> GetDimensions()
{
try
{
return await _JSRuntime.InvokeAsync<BrowserDimension>("getDimensions");
}
catch(Exception ex)
{
Console.WriteLine(ex);
return new BrowserDimension { Height = 800, Width = 1000 };
}
}
}
}
Пример использования на странице бритвы:
@page "/ManageChosenSubjects"
@inject StudentService studentService
@inject SubjectService subjectService
@inject UserService userService
@inject AuthenticationStateProvider AuthenticationStateProvider
@inject BrowserResizeService ResizeService
...
@code
{
public int Height { get; set; }
public int Width { get; set; }
...
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
ResizeService.OnResize += OnResize;
}
}
private async Task OnResize()
{
await GetDimensions();
}
async Task GetDimensions()
{
var dimension = await ResizeService.GetDimensions();
Height = dimension.Height - 220;
Width = dimension.Width - 400;
Console.WriteLine($"H: {Height}, W: {Width}");
this.StateHasChanged();
}
public void Dispose()
{
ResizeService.OnResize -= OnResize;
}
}
Мой индексный файл:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>StudyMate</title>
<base href="/" />
...
<script src="/JavaScript/browser-resize.js"></script>
</head>
<body>
<app>Loading...</app>
<div id="blazor-error-ui">
An unhandled error- WHY щ(゚Д゚щ)
<a href="" class="reload">Reload</a>
<a class="dismiss">?</a>
</div>
<script src="_framework/blazor.webassembly.js"></script>
<script src="/Libs/InputFile/inputfile.js"></script>
</body>
</html>
Файл сценария java:
window.getDimensions = function () {
return {
width: window.innerWidth,
height: window.innerHeight
};
};
var browserResize = {
getInnerHeight: function () {
return window.innerHeight;
},
getInnerWidth: function () {
return window.innerWidth;
},
resized: function () {
DotNet.invokeMethodAsync("StudyMate.Client", 'OnBrowserResize');
}
};
window.addEventListener("resize", browserResize.resized);