繁体   English   中英

Blazor JS Interop 调用混乱

[英]Blazor JS Interop call confusion

下面有两个错误类型的语法错误,但是,我找不到任何关于如何使用它以及我做错了什么的文档。 我想给这个open函数提供什么参数?

    Syntax error 1 - Argument 2: cannot convert from 'string' to 'System.Threading.CancellationToken'   
    Syntax error 2 - Argument 3: cannot convert from 'string' to 'object[]' 

 private async Task HelloWorld() { string url = "https://www.google.com"; await JSRuntime.InvokeAsync<object>("open", url, "_blank"); }

JSRuntime是一个没有静态方法的抽象类,因此您不能调用类本身的InvokeAsync方法。 要执行 javascript,您必须注入一个IJSRuntime对象:

public class MyClass{
  
 private readonly IJSRuntime js;
 public MyClass(IJSRuntime js){
       this.js=js;
   }

    private async Task HelloWorld()
    {
           string url = "https://www.google.com";
           await js.InvokeAsync<object>("open", url, "_blank");
    }
}

在没有看到更多代码的情况下,无论是在 JS 方面还是在剃刀方面,要说出真正发生的事情有点棘手。 但是,这里有一个在 C# 代码中调用 JS 函数的简单示例。 顺便说一句,我假设(希望是正确的!)您是在一个组件中执行此操作,因为它们的代码在类中调用它时略有不同。 此外,查看您从 JS 方法返回的内容(如果有的话)会很有帮助:

C#

@inject IJSRuntime JSRuntime

@code {
    private async Task HelloWorld()
    {
        string url = "https://www.google.com";
        await JSRuntime.InvokeAsync<object>("open", url, "_blank");
    }
}

JS

<script>
    window.open = function (url, target) {
        console.log(url, target)
    }
</script>

就我而言,我在页面顶部有这个:

@inject IJSRuntime JsRuntime;

我的方法是这样的:

private async void OpenSettings()
{
    await JSRuntime.InvokeAsync<object>("Alert", nameof(OpenSettings));
}

显然我有一个错字,所以我调用的是JSRuntime而不是JsRuntime (注意小“s”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM