You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor集成Chargebee JS Drop-In脚本点击无响应问题咨询

问题原因

Blazor采用动态DOM渲染机制,Chargebee Drop-In脚本默认仅在页面首次加载完成时扫描当前DOM中所有携带data-cb-*属性的元素,为其绑定唤起结账弹窗的点击事件。你在Razor视图中编写的触发链接,是在Chargebee初始化逻辑执行完成后,才被Blazor渲染插入到DOM结构中的,没有被初始化扫描逻辑捕获,因此点击不会触发任何行为,也不会抛出控制台错误。这也是为什么相同代码在静态HTML页面可以正常运行——静态页面中触发链接在脚本加载时就已经存在于DOM中。

解决方案

你可以从以下两种方案中选择适配自己项目的实现:

方案1:通过JS互操作直接调用Chargebee API(推荐,兼容所有Blazor渲染模式)

放弃依赖静态属性自动绑定事件的逻辑,直接在点击事件中调用Chargebee提供的公开JS API唤起结账流程,稳定性最高:

  1. 保留你已经在index.html中添加的脚本引入配置,无需修改
  2. 将原有静态触发链接替换为绑定Blazor点击事件的元素,移除原生data-cb-*属性:
@inject IJSRuntime JS
<a href="javascript:void(0)" @onclick="OpenChargebeeCheckout">Subscribe</a>

@code {
    private async Task OpenChargebeeCheckout()
    {
        var cbInstance = await JS.InvokeAsync<IJSObjectReference>("Chargebee.getInstance");
        await cbInstance.InvokeVoidAsync("openCheckout", new
        {
            hostedPage = new
            {
                type = "checkout",
                items = new[]
                {
                    new { id = "Product-Name", quantity = 1 }
                }
            }
        });
    }
}

方案2:触发Chargebee重新扫描DOM(适配原生属性写法)

如果你希望保留官方示例的data-cb-*属性写法,可以在组件渲染完成后手动调用Chargebee的刷新方法,让它重新扫描页面新增的带标记元素、绑定点击事件:

  1. 保留原有Razor中的触发链接代码不变:
<a href="javascript:void(0)" data-cb-type="checkout" data-cb-item-0="Product-Name" data-cb-item-0-quantity="1"> Subscribe </a>
  1. 在组件的渲染完成生命周期中调用刷新扫描逻辑:
@inject IJSRuntime JS
@code {
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            await JS.InvokeVoidAsync("Chargebee.refresh");
        }
    }
}
注意事项
  • 不要将Chargebee的脚本引入标签放在Razor组件内部,必须放在根文档(WASM为index.html,Server模式为_Host.cshtml/App.razor)中,避免脚本重复加载
  • 如果开启了预渲染模式,所有JS互操作逻辑必须放在firstRender == true的判断分支内执行,避免预渲染阶段调用JS抛出异常
  • 调试时可以先在浏览器控制台执行window.Chargebee验证实例是否存在,确认脚本本身加载成功

内容的提问来源于stack exchange,提问作者G_Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 05:09:19