Quantcast
Channel: Active questions tagged blazor - Stack Overflow
Viewing all articles
Browse latest Browse all 4839

Blazor chrome extension invoke C# method in BackgroundWorker.js

$
0
0

At simple BlazorBrowserExtension i'm trying to call a c# method marked with the [JSInvokable] from BackgroundWorker.js extension file.

According to documentation the project structure:

enter image description here

FilesChooser.cs

 public class FilesChooser {     public FilesChooser(string? name)     {         Name = name ?? "No Name";     }     public string? Name { get; set; }     [JSInvokable]     public string GetHelloMessage() => $"Hello, {Name}!"; }

JsInteropClasses3.cs

public class JsInteropClasses3  {      private readonly IJSRuntime js;      public JsInteropClasses3(IJSRuntime js)      {          this.js = js;      }      public async ValueTask<string> CallHelloHelperGetHelloMessage(string? name)      {          using var objRef = DotNetObjectReference.Create(new FilesChooser(name));          return await js.InvokeAsync<string>("GetHelloMessage", objRef);      }  }

And it works well on Index.razor

@code {    private string? name;    private string? result;    private JsInteropClasses3? jsInteropClasses;    protected override void OnInitialized()    {        jsInteropClasses = new JsInteropClasses3(JS);    }    private async Task TriggerDotNetInstanceMethod()    {        if (jsInteropClasses is not null)        {            result = await jsInteropClasses.CallHelloHelperGetHelloMessage(name);        }    }}

But when i'm calling it from BackgroundWorker.js nothing hapends (obviously falling with exseptions):

import * as _ from "/content/Blazor.BrowserExtension/lib/browser-polyfill.min.js";browser.runtime.onInstalled.addListener(() => {  const indexPageUrl = browser.runtime.getURL("index.html");  browser.tabs.create({    url: indexPageUrl  });});browser.runtime.onMessage.addListener(function (request, sender, sendResponse) {    // Callback for that request    let rez = '';    browser.invokeMethodsAsync = async (element) => {        rez = await element.dotNetHelper.invokeMethodAsync('GetHelloMessage');        sendResponse({ message: "Background has received that message 🔥" + rez});    }    return true;  // Add return true to fix the error. });

Is it possible. What can be done in this situation?


Viewing all articles
Browse latest Browse all 4839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>