【问题标题】:How make window.history.go(-1) from Blazor c# code?如何从 Blazor c# 代码制作 window.history.go(-1)?
【发布时间】:2019-05-23 11:46:22
【问题描述】:

如何在 Blazor 上使用 c# 代码制作 window.history.go(-1)?

我尝试使用 JSRuntime.Current.InvokeAsync

JSRuntime.Current.InvokeAsync< string >( "history.go", new[] {-1} );
JSRuntime.Current.InvokeAsync< string >( "top.history.go", new[] {-1} );
JSRuntime.Current.InvokeAsync< string >( "window.history.go", new[] {-1} );
JSRuntime.Current.InvokeAsync< string >( "window.top.history.go", new[] {-1} );

但我收到错误:调用未实现接口 History 的对象。

但它可以从 cshtml 工作:

<button id="BtnBack" type="button" onclick="window.history.go(-1)" class="btn btn-default">Back</button>

【问题讨论】:

  • 对 InvokeAsync 的四次调用是否出现相同的错误?

标签: blazor


【解决方案1】:

不确定细节,但我相信像这样进行互操作,你需要更明确一点。所以如果你把这个脚本放在你的index.html 中(不是我一定建议你把它投入生产的地方):

<script>
    window.test = {
        historyGo(value) {
            window.history.go(value);
        }
    };
</script>

然后将此代码放入您的 Blazor 页面中:

<button type="button" onclick="@OnClick">Go Back</button>

使用这样的事件处理程序:

private void OnClick()
{
    JSRuntime.Current.InvokeAsync<object>("test.historyGo", -1);
}

一切都如您所愿。我尝试了您采用的方法(在您自己的 JS 中没有明确的互操作层),同样发现它不起作用。但这对我来说似乎是一个合理的解决方法。有兴趣详细说明为什么 this 有效而 your 代码无效,但希望这会有所帮助。

【讨论】:

  • 在较新的版本中是:JSRuntime.InvokeAsync("test.historyGo", -1);
【解决方案2】:

这可以在没有 JavaScript 的情况下完成。

将 JSRuntime 注入到您的组件/页面中:

@inject IJSRuntime _jsRuntime

直接调用history.go(-1)

_jsRuntime.InvokeVoidAsync("history.go", -1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2014-03-04
    • 2020-12-22
    • 1970-01-01
    • 2011-06-16
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多