问题标签 [blazor-jsinterop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
177 浏览

c# - 在 BlazorStrap Carousel 上使用 JSRuntime.InvokeAsync 会导致“索引超出范围”错误

在我的 Blazor 服务器应用程序中,我有一个带有 BlazorStrap 轮播的页面和一个用于下载 zip 文件的按钮。Carousel 工作正常,可以毫无问题地循环播放所有图像,直到我单击按钮下载 zip 文件。zip 文件正确下载,但之后我在控制台中收到此错误:

错误:System.ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task
) 在 Microsoft.AspNetCore .Components.RenderTree.Renderer.GetErrorHandledTask(任务taskToHandle)

我的轮播和下载文件按钮的 HTML:

获取轮播项目的代码:

单击下载文件按钮时的代码:

编辑:我忘了补充说我的渲染模式是 Server 而不是 ServerPrerendered。

0 投票
1 回答
192 浏览

blazor - 如何从 Blazor 调用 javascript 函数并取回数据(网络摄像头应用视频流并保存屏幕截图)?

如何从 Blazor 调用 javascript 函数并取回数据(网络摄像头应用视频流并保存屏幕截图)?

嗨,我研究了使用 Blazor 和网络摄像头(目标 -> 浏览器中来自 Cam 的视频流//截取流的屏幕截图//将屏幕截图保存到高清)。 我开始的来源是本教程

我让流开始工作,并添加了代码以从视频流中截取屏幕截图,这也可以,但前提是通过“js”按钮调用。从使用的 Javascript 内部:

我无法弄清楚的要点是:

1. 我想通过 Blazor 的 JS-Interop 调用 js 函数,而不是通过 JavaScript 内部的 Eventlistener。但是我无法为该调用获取正确的代码!?也许答案非常简单,而且是单行的。我对 Javascript 的了解为零(这就是为什么我(必须)使用 Blazor :) )

2.如何将js中的imagedata发回Blazor成byte[]。

我的代码 Blazor/RazorPage:

我从中得到的错误

公共异步任务 TakePicBzBtn()

在浏览器控制台中:

blazor.server.js:21 [2021-06-04T15:44:42.954Z] 错误:Microsoft.JSInterop.JSException:找不到“takePic”(“takePic”未定义)。错误:找不到“takePic”(“takePic”未定义)。

我几乎复制/粘贴代码 JS:

对不起代码墙

0 投票
1 回答
186 浏览

c# - 在 Blazor 组件中使用 Javascript addEventListener

我有一个在服务器端呈现的 Blazor 组件。我想在里面放一些可折叠的 div。但是,由于代码是服务器呈现的,因此不会执行 Javascript,因此这些部分不会崩溃。

这是我script.js文件中的代码:

这是我的main.cshtml文件:

最后是我Main的带有可折叠部件的组件:

如果我使用render-mode="Static"而不是render-mode="Server"它可以工作,但是由于我的组件内部将有事件,所以对我来说是不可能的。例如,我如何使用 JSInterop 调用我的 JS 脚本来使我的 div 崩溃?

0 投票
2 回答
286 浏览

blazor - 使用 IJSRuntime Blazor 时的屏幕呈现问题

首先,我对我的英语水平感到非常抱歉。

我目前正在通过 dotnet core 3.1 blazor 开发一个 Web 项目。

如下面的源代码,我使用 IJSRuntime 来调用需要很长时间的 Javascript 函数。

Javascript函数需要很长时间,所以我添加了下面的源代码来添加一个微调器。

剃须刀页面上的微调器定义如下:

“StateHasChanged()”或“await InvokeAsync(() => StateHasChanged())”也不起作用。

当我使用 Task 而不是 JSRuntime 时它工作正常。

为什么我使用 JSRuntime.InvokeVoidAsync 时它不起作用?

谢谢你,很抱歉读到难读的英语。

0 投票
0 回答
161 浏览

javascript - 我的 Blazor 应用程序中的自定义 JavaScript 正在加载但未“工作”,函数不可调用

在我的 Bootstrap 项目中,我使用了几个 JavaScript 文件。我像这样加载这些文件:

App.razor

但是,当我尝试使用我的任何自定义 JavaScript (JavaScript.js) 时,它不起作用。

当我尝试像这样“直接”调用它时:

浏览器给了我错误:

当我尝试像这样通过 Blazor 调用它时:

Blazor 给了我这个错误:

我知道我的 JavaScript.js 正在加载,因为我把它放在文件的末尾:

并且总是弹出警告框。

令人沮丧的是,.JS我加载的所有其他文件都正常工作。

我做错了什么?

0 投票
1 回答
604 浏览

blazor - Blazor JS 互操作 getElementById 以获取组件引用

我需要在 Blazor 中通过其 ID 获取对组件的引用。注意:不使用 ElementReference,因为它用于通用代码。

我已经使用这个 JS Interop 脚本来做焦点,它对我来说很好:

但是我需要从 Blazor 获得的只是对元素(组件)的引用,即返回: document.getElementById(""{elementId}"") 将 elementId 作为参数发送给它。

可能吗?

编辑:我试过这个脚本,但从 Blazor 调用它时总是返回 null:

0 投票
0 回答
54 浏览

asp.net-core - 无法从 Blazor Server 应用程序中的新线路调用 JSInterop

打开新电路后,我无法调用 JSInterop 方法。我正在通过从 JS 中打开一个新选项卡来创建新电路,如下所示: await _jsRuntime.InvokeAsync<object>("open", "/new-tab", "_blank");

接下来,在新选项卡中呈现的组件中,我尝试调用这样的 JS 方法:

一旦调用 jsRuntime,我就会收到以下错误:

任何帮助或建议表示赞赏!

0 投票
1 回答
56 浏览

asp.net-core - 在 Blazor 应用程序中打开新选项卡的行为不符合预期

我的 Blazor 应用程序遇到了一个问题,我试图在新选项卡中打开一个页面,虽然它确实打开了页面,但由于某种原因它在 URL 中添加了额外的字符。顶部的指令是这样的:

@page "folder/mypage"

在我的应用程序中,我正在打开这样的标签:

await _jsRuntime.InvokeAsync<object>("open", "folder/mypage", "_blank");

但 URL 显示如下:

myapp.com/folder/folder/mypage

我不确定我错过了什么或做错了什么,如果我能得到任何帮助,我将不胜感激。

0 投票
1 回答
98 浏览

c# - Blazor, run non static function when static string change

I'm having a static class with a static string, this string are changed by a Javascript. What is the best way to check for changes of this string in a (non-static) blazor component?

I can have a function run on a timer and let that notify me when a change is made, what other options do I have here?

the function that needs to know if the static string has changed are present in a component that inherits from ComponentBase, if thats any help.

0 投票
1 回答
204 浏览

javascript - 使用来自 js 的 blazor 互操作调用非静态方法

在 Blazor 应用程序上工作,它有一个需要从 JS 调用的方法!当我尝试在没有 static 关键字的情况下调用该方法时,出现此错误-

一旦我添加静态,它就会识别并加载它。

这是我在 blazor 组件中的代码 -

JS-

BlazorInterop.js

我不想使用静态关键字作为GetData非静态方法,我不能从静态方法调用它。

我在哪里错了。