加载 Javascript Blazor 组件
Load Javascript Blazor component
我正在尝试将我的 .netcore 网站转换为 Blazor SPA。80% 的工作已完成。我的 Facebook Like/Share 按钮无法通过 .razor 页面显示。
我在 .razor 页面的 index.html 和 facebook "Div" 下方放置了 facebook javascript。
<script>
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.10&appId=00000000000000';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
我认为问题是 Facebook javascript 在 DOM 上呈现 blazor 内容之前执行。
有什么方法可以仅将组件 javascript 与该组件绑定,这样当我的 facebook 组件显示时,只有 facebook javascript 会 运行 ?
您可以从 OnAfterRenderAsync 方法调用 JSInterop,如下所示:
@page "/"
@inject IJSRuntime jsRuntime
<h1 id="myid" @ref=MyElementReference>Hello, world!</h1>
@code{
ElementReference MyElementReference;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JSRuntime.InvokeAsync<object>("MyJSMethods.myMethod", MyElementReference);
}
}
}
注意:您需要注入 JSRuntime 对象才能执行 JSInterop 调用。
您必须在渲染组件后调用 JavaScript 代码。 OnAfterRenderAsync 方法在组件呈现后调用,因此您可以将代码放在这里来初始化您的组件。这应该是当 firstRender 为真时,并且多次调用您的 JavaScript 对象时,当 firstRender 为假时。
将您的脚本放在 _Host.cshtml 文件的底部,就在
下面
<script src="_framework/blazor.server.js"></script>
<script>
window.MyJSMethods =
{
myMethod: function (element) {
window.alert(element.id);
}
};
</script>
请注意,函数采用的名为 element 的参数是一个元素对象,因为我们在 Blazor 中将参数定义为 ElementReference。当然,您可以传递元素 ID。
我正在尝试将我的 .netcore 网站转换为 Blazor SPA。80% 的工作已完成。我的 Facebook Like/Share 按钮无法通过 .razor 页面显示。 我在 .razor 页面的 index.html 和 facebook "Div" 下方放置了 facebook javascript。
<script>
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.10&appId=00000000000000';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
我认为问题是 Facebook javascript 在 DOM 上呈现 blazor 内容之前执行。 有什么方法可以仅将组件 javascript 与该组件绑定,这样当我的 facebook 组件显示时,只有 facebook javascript 会 运行 ?
您可以从 OnAfterRenderAsync 方法调用 JSInterop,如下所示:
@page "/"
@inject IJSRuntime jsRuntime
<h1 id="myid" @ref=MyElementReference>Hello, world!</h1>
@code{
ElementReference MyElementReference;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await JSRuntime.InvokeAsync<object>("MyJSMethods.myMethod", MyElementReference);
}
}
}
注意:您需要注入 JSRuntime 对象才能执行 JSInterop 调用。
您必须在渲染组件后调用 JavaScript 代码。 OnAfterRenderAsync 方法在组件呈现后调用,因此您可以将代码放在这里来初始化您的组件。这应该是当 firstRender 为真时,并且多次调用您的 JavaScript 对象时,当 firstRender 为假时。
将您的脚本放在 _Host.cshtml 文件的底部,就在
下面<script src="_framework/blazor.server.js"></script>
<script>
window.MyJSMethods =
{
myMethod: function (element) {
window.alert(element.id);
}
};
</script>
请注意,函数采用的名为 element 的参数是一个元素对象,因为我们在 Blazor 中将参数定义为 ElementReference。当然,您可以传递元素 ID。