browser - 识别 Blazor 应用程序中的浏览器详细信息
问题描述
好的,我让微软取消了 .Net Framework 中的所有很酷的功能,这些功能使我们能够确定浏览器的详细信息。但是我应该如何在 Blazor 组件的 @Code 块中获取这些信息?我已经尝试过 Syjus.BrowserDetector 和 Wangkanai.Detection 并得到相同的结果。我可以在组件的 html 部分收集浏览器详细信息,但不能在代码块中收集。这是因为所有示例都将依赖项注入到 MVC 样式组件中,而我没有看到如何使用 Blazor 代码块执行此操作。任何和所有的帮助表示赞赏,我并不特别关心我如何在代码块、Javascript、函数等中识别浏览器,只要它有效。
解决方案
好的,这是一个使用 Javascript 进行调用以识别浏览器的解决方案。注意:这些步骤通常适用于 javascript 设置,并且适用于任何 js 函数。在项目的 wwwroot 文件夹下创建一个 JS 文件夹,然后添加一个 .js 文件。在 _hosts.cshtml 中,添加对 .js 文件的文件引用。例如:将您的函数添加到 .js 文件中。在这种情况下,我们正在研究浏览器识别功能。前任:
function identifyBrowser() {
var sBrowser, sUsrAg = navigator.userAgent;
if (sUsrAg.indexOf("Firefox") > -1) { // "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"
sBrowser = "Mozilla Firefox";
} else if (sUsrAg.indexOf("SamsungBrowser") > -1) { // "Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G955F Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.4 Chrome/67.0.3396.87 Mobile Safari/537.36
sBrowser = "Samsung Internet";
} else if (sUsrAg.indexOf("Opera") > -1 || sUsrAg.indexOf("OPR") > -1) { // "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.106"
sBrowser = "Opera";
} else if (sUsrAg.indexOf("Trident") > -1) { // "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 3.6.0; wbx 1.0.0; rv:11.0) like Gecko"
sBrowser = "Microsoft Internet Explorer";
} else if (sUsrAg.indexOf("Edge") > -1) { // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
sBrowser = "Microsoft Edge";
} else if (sUsrAg.indexOf("Chrome") > -1) { // "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/66.0.3359.181 Chrome/66.0.3359.181 Safari/537.36"
sBrowser = "Google Chrome or Chromium";
} else if (sUsrAg.indexOf("Safari") > -1) { // "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1 980x1306"
sBrowser = "Apple Safari";
} else {
sBrowser = "unknown";
}
return sBrowser;
}
在你的 .razor 文件中,创建一种调用函数的方法,比如一个控件。例如:添加 @onclick="IdentifyBrowser"。
在 @code 段内,添加您的方法。
async Task IdentifyBrowser()
{
string browser = "";
browser = await JsRuntime.InvokeAsync<string>(identifier: "identifyBrowser");
ShowAlert(browser);
}
请注意,此调用传递一个值(字符串),而函数(在 .js 中)是您的“identfier”,在本例中为“identifyBrowser”。
注意示例中的“ShowAlert”?这是一个不传递值的调用。前任:
async Task ShowAlert(string message)
{
await JsRuntime.InvokeVoidAsync(identifier: "createAlert", message);
}
请注意,此示例是在服务器运行 Blazor 上构建的。因此,当您在 IE 11 上运行它时,它仍然无法工作,因为它是 Web 程序集。接下来,我将看看 polyfill 对实际运行 IE 11 的承诺。
推荐阅读
- python - 使用 `keras.utils.Sequence` 作为输入时,不支持 `y` 参数。错误
- oracle - ORA-00936: 缺少表达式
- javascript - 如何使特定选项出现在选择菜单中?
- r - 使用 model.matrix 的 One-hot 编码
- bash - 重新分发文件夹中的文件
- c++ - C ++中struct后双括号的含义?
- ssl - Windows 上的 Composer 安装程序错误:OpenSSL 因“证书验证失败”错误而失败
- ceph - cephfs 出现“只读文件系统”错误,如何处理?
- python - IndentationError: unindent 不匹配任何外部缩进
- amazon-web-services - 如何让 Terraform 等待 cloudinit 完成?