我有一个应用程序使用javascript从WebView控件中调用另一个项目本机c#类方法(非常类似于this github项目)
我在OnNavigationStarting事件中使用AddWedAllowedObject方法。
如何从正在调用的本机c#类方法中隐藏/显示XAML控件?由于循环依赖,我无法在其他项目中引用Page类。
答案 0 :(得分:0)
传递到 AddWebAllowedObject 的对象必须从与app程序集分开的Windows Runtime component导入。这是 AllowForWeb 属性必须由WebView安全子系统标识的属性。如果您使用应用项目中的类,则 AddWebAllowedObject 不起作用。
有关详细信息,请参阅WebView.AddWebAllowedObject
。
如您所知,由于循环依赖,我们无法在其他项目中引用Page类。
作为一种解决方法,我们可以从Html向页面发送一个字符串。并根据字符串隐藏/显示XAML控件。
当页面调用window.external.notify并传递字符串参数时,托管的HTML页面可以在Windows应用商店应用中触发ScriptNotify事件。
有关详细信息,请参阅WebView.ScriptNotify。
例如:
<WebView Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ScriptNotify="Web_ScriptNotify"
NavigationStarting="OnNavigationStarting" x:Name="Web" Source="ms-appx-web:///WebPage.html" />
<Ellipse Name="MyEllipse" Fill="Red" Height="200" Width="200"></Ellipse>
在代码背后:
private void Web_ScriptNotify(object sender, NotifyEventArgs e)
{
if (e.Value == "Collapsed")
{
MyEllipse.Visibility = Visibility.Collapsed;
}
else
{
MyEllipse.Visibility = Visibility.Visible;
}
}
在WebPage.html中编辑功能:
function showToast() {
window.external.notify('Collapsed');
}