Как разрешить браузер, указанный c (Firefox) «Нет. NET Диспетчер вызовов установлен» в Blazor (WASM) - PullRequest
0 голосов
/ 19 марта 2020

У меня проблемы с медленной загрузкой моей страницы. Я обнаружил, что в консоли отладки на 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);

...