gpt4 book ai didi

javascript - C# 类属性在 Javascript 中不可访问

转载 作者:行者123 更新时间:2023-11-28 19:03:55 26 4
gpt4 key购买 nike

我想通过 C# WebView-Control 在 JavaScript 中访问我的一个类。因此我使用 WebView.AddWebAllowedObject 方法。但是,如果我分配一个属性,它工作正常,但如果我分配整个类来获取js中的所有属性,则所有属性(和方法)都是“未定义”。我尝试了在 www 中找到的所有内容。见附件代码:

        //The class I want to make accessible
[AllowForWeb, ComVisible(true)]
[MarshalingBehavior(MarshalingType.Agile)]
public class DeviceInformation
{
public string IPAdress { get; private set; }

public DeviceInformation()
{
IPAdress = GetIPAdress();
}

public string GetDeviceUUID()
{
EasClientDeviceInformation deviceinfo = new EasClientDeviceInformation();
return deviceinfo.Id.ToString();
}

public string GetIPAdress()
{
List<string> ipAddresses = new List<string>();
var hostnames = NetworkInformation.GetHostNames();
foreach (var hn in hostnames)
{
if (hn?.IPInformation != null && (hn.IPInformation.NetworkAdapter.IanaInterfaceType == 71 ||
hn.IPInformation.NetworkAdapter.IanaInterfaceType == 6))
{
string ipadress = hn.DisplayName;
return ipadress;
}
}
return string.Empty;
}
}

这里对象被初始化。

DeviceInformation devinf = new DeviceInformation();
private void View_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
if (args.Uri.Host == "")
{
//win_ipadress has an ipadress as value
view.AddWebAllowedObject("win_ipadress", devinf.IPAdress);
//deviceInformation is initialized as well but I have no access to its attributes
view.AddWebAllowedObject("deviceInformation", devinf);
}
}

这就是我在 js 中的调用方式:

else if ($.os.ie) {
myIpAdr = window.win_ipadress;
//Throws an exception because GetIPAdress() is "undefined"
myIpAdr = window.deviceInformation.GetIPAdress();
}

我在 Windows 通用应用程序中使用它。 Javascript 和 WebView 中显示的 HTML 代码已在 Android 和 iOS 中使用。

最佳答案

我相信您需要定义以小写字符开头的方法名称。

例如:将 GetIPAddress 更改为 getIPAddress。

我在我这边测试了一下,发现如果我使用大写名称“GetIPAddress”,它将不起作用。但如果我使用 getIPAddress,它就可以工作。

在我读完 this 中 kangax 的解释后题主,我觉得很有道理。

[更新]

由于更改方法名称后仍然不起作用,我认为问题应该与您如何公开 Windows 运行时对象有关。我猜您只是定义了 DeviceInformation 类并尝试在同一个项目中使用它。

首先,我们需要创建一个单独的Windows通用Windows运行时组件项目。

应将 C# 类 DeviceInformation 放入此项目中。保留相同的代码。

然后,在您的通用应用项目中,添加对 Windows 运行时组件的引用并保留其余代码以使用 Windows 运行时对象。

[更新2]

刚刚注意到 VS 中一个有趣的行为。无论我们在C#中定义的方法名称是以大写还是小写开头,Visual Studio Intellisense都会显示小写,因此当我们尝试在js中使用它时,方法名称会自动转换。

关于javascript - C# 类属性在 Javascript 中不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32052364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com