【问题标题】:toDataURL() can't save contents of HTML5 canvas with JS Interop in Blazor Webassembly?toDataURL() 无法在 Blazor Webassembly 中使用 JS 互操作保存 HTML5 画布的内容?
【发布时间】:2021-12-07 19:56:59
【问题描述】:

我正在尝试使用 Blazor Wasm 作为学习练习来构建一个基本的绘图应用程序。通过 Blazor.Extensions.Canvas 提供的 API 绘制到画布似乎工作正常,但我正在尝试将画布的内容保存到 PNG 并且我遇到了问题。由于在 Blazor.Extensions.Canvas 提供的 C# 包装器中没有此方法,因此我在 index.html 的脚本标记内有一个简单的 JS 函数:

function saveCanvasContents(canvcont) //this parameter is supposed to be the canvas context object
{
    return canvcont.toDataURL();
}

从 C# 组件调用如下:

Object testObject = await jsRuntime.InvokeAsync<Object>("saveCanvasContents", new object[] {_context});

_context 这里是 Blazor Extensions Canvas 的上下文,由_context = await CanvasReference.CreateCanvas2DAsync();OnAfterRenderAsync 中生成。

无论如何,运行它会在浏览器控制台中生成Microsoft.JSInterop.JSException: canvcont.toDataURL is not a function。我的直觉是,这是因为我传递的不是 HTMLCanvasElement,因此没有 toDataURL。将对画布组件的引用(上面的 CanvasReference,它的类型为 BECanvasComponent)传递给它具有相同的结果。我是否误解了 Blazor 的 JS interop / JS 的基本知识,还是在 Blazor 中有更好的方法来解决这个问题?

【问题讨论】:

    标签: javascript c# html5-canvas blazor


    【解决方案1】:

    想通了。我必须通过_context.Canvas 的方法。我传递给它的所有其他内容都是指一个 BECanvas 组件,它包装了一个 HTML5 画布,而不是一个常规的旧 HTML 画布,因此其中一个没有 toDataURL 方法是有道理的。祝以后发现这个的人好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-16
      • 2011-08-07
      • 2018-06-22
      • 2020-07-15
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2012-10-25
      相关资源
      最近更新 更多