Skip to content

Commit 2636bcd

Browse files
committed
Merge remote-tracking branch 'origin/main' into feat-textarea
2 parents 0f463da + 9ee6ea5 commit 2636bcd

File tree

4 files changed

+50
-20
lines changed

4 files changed

+50
-20
lines changed

src/BootstrapBlazor/BootstrapBlazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>9.3.1-beta10</Version>
4+
<Version>9.3.1-beta11</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/IFrame/IFrame.razor.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ public partial class IFrame
2828
[Parameter]
2929
public Func<object?, Task>? OnPostDataAsync { get; set; }
3030

31+
/// <summary>
32+
/// 获得/设置 页面加载完毕后回调方法
33+
/// </summary>
34+
[Parameter]
35+
public Func<Task>? OnReadyAsync { get; set; }
36+
3137
private string? ClassString => CssBuilder.Default("bb-frame")
3238
.AddClassFromAttributes(AdditionalAttributes)
3339
.Build();
@@ -53,7 +59,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
5359
/// <inheritdoc/>
5460
/// </summary>
5561
/// <returns></returns>
56-
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(CallbackAsync));
62+
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(TriggerPostData));
5763

5864
/// <summary>
5965
/// 推送数据方法
@@ -68,11 +74,24 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
6874
/// <param name="data"></param>
6975
/// <returns></returns>
7076
[JSInvokable]
71-
public async Task CallbackAsync(object? data)
77+
public async Task TriggerPostData(object? data)
7278
{
7379
if (OnPostDataAsync != null)
7480
{
7581
await OnPostDataAsync(data);
7682
}
7783
}
84+
85+
/// <summary>
86+
/// 由 JavaScript 调用
87+
/// </summary>
88+
/// <returns></returns>
89+
[JSInvokable]
90+
public async Task TriggerLoaded()
91+
{
92+
if (OnReadyAsync != null)
93+
{
94+
await OnReadyAsync();
95+
}
96+
}
7897
}

src/BootstrapBlazor/Components/IFrame/IFrame.razor.js

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,19 @@ export function init(id, invoke, callback) {
66
}
77
Data.set(id, handler)
88

9-
window.addEventListener('message', handler)
10-
}
9+
window.addEventListener('message', handler);
10+
const frame = document.getElementById(id);
1111

12-
export function execute(id, data) {
13-
const frame = document.getElementById(id)
14-
if (frame) {
15-
if (frame.loaded) {
16-
frame.contentWindow.postMessage(data)
17-
}
18-
else {
19-
frame.onload = () => {
20-
frame.loaded = true
21-
frame.contentWindow.postMessage(data)
22-
}
23-
}
12+
frame.onload = () => {
13+
invoke.invokeMethodAsync("TriggerLoaded");
2414
}
2515
}
2616

17+
export async function execute(id, data) {
18+
const frame = document.getElementById(id);
19+
frame.contentWindow.postMessage(data);
20+
}
21+
2722
export function dispose(id) {
2823
const handler = Data.get(id)
2924
Data.remove(id)

test/UnitTest/Components/IFrameTest.cs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace UnitTest.Components;
88
public class IFrameTest : BootstrapBlazorTestBase
99
{
1010
[Fact]
11-
public void Frame_Ok()
11+
public async Task Frame_Ok()
1212
{
1313
var postData = false;
1414
var cut = Context.RenderComponent<IFrame>(pb =>
@@ -27,10 +27,26 @@ public void Frame_Ok()
2727
pb.Add(a => a.Data, new { Rows = new List<string>() { "1", "2" } });
2828
});
2929

30-
cut.InvokeAsync(async () =>
30+
await cut.InvokeAsync(async () =>
3131
{
32-
await cut.Instance.CallbackAsync(new List<string> { "2", "3" });
32+
await cut.Instance.TriggerPostData(new List<string> { "2", "3" });
3333
Assert.True(postData);
3434
});
35+
36+
var loaded = false;
37+
cut.SetParametersAndRender(pb =>
38+
{
39+
pb.Add(a => a.OnReadyAsync, () =>
40+
{
41+
loaded = true;
42+
return Task.CompletedTask;
43+
});
44+
});
45+
46+
await cut.InvokeAsync(async () =>
47+
{
48+
await cut.Instance.TriggerLoaded();
49+
});
50+
Assert.True(loaded);
3551
}
3652
}

0 commit comments

Comments
 (0)