xamarin - Xamarin Forms WebView 打开外部链接
问题描述
我的应用程序中有一个 webview,当单击外部链接(在普通浏览器中在新选项卡中打开)时,我无法返回我的网站。
当一个新标签打开时,有可能像 Gmail 一样关闭该标签的菜单吗?
目的是,每当单击链接时,用户都可以选择使用哪个选项来查看内容,例如单击链接将建议打开 youtube 应用程序或谷歌浏览器。目的是出现 google chrome 选项
或者你有什么建议来处理这种情况?
解决方案
如果我对您的理解正确,您希望可以选择如何打开 Web 链接 - 在您的应用程序内或在另一个应用程序(浏览器)的上下文中。
如果这是正确的,那么您可以使用Xamarin.Essentials:浏览器功能。
public async Task OpenBrowser(Uri uri)
{
await Browser.OpenAsync(uri, BrowserLaunchMode.SystemPreferred);
}
这里重要的属性是BrowserLaunchMode
标志,您可以在此处了解更多信息
基本上,您有 2 个选项 - External
& SystemPreferred
。
- 我认为第一个很清楚-它将在外部浏览器中打开链接。
- 第二个选项利用 Android 的Chrome 自定义选项卡和适用于 iOS - SFSafariViewController
PS您还可以自定义PreferredToolbarColor
,,TitleMode
等。
编辑:根据您在评论中的反馈,您希望控制如何从您的网站打开 href 链接。
如果我理解正确,您希望第一次打开您的网站时,顶部没有导航栏,然后才拥有它。不幸的是,这是不可能的。
您可以实现相反的行为 - 第一次打开网站时,有导航栏,如果用户点击任何链接,则在外部(在浏览器内)打开它。为此,您有 2 个选项:
- 要从您的网站执行此操作 - 将标签
a
的目标更改为_blank
这样; - 要从您的移动应用程序中执行此操作 -为 WebView创建一个自定义渲染器。在 Android 项目的渲染器实现中,将
Control
'更改为WebViewClient
:
public class CustomWebViewClient : WebViewClient
{
public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
{
Intent intent = new Intent(Intent.ActionView, request.Url);
CrossCurrentActivity.Current.StartActivity(intent);
return true;
}
}
推荐阅读
- python - 如何将多维列表合并到一个元组列表中?
- flutter - 元素类型'Future
' 无法分配给列表类型 'Widget'。解决此错误的给定解决方案均不适合我 - python - Python冻结正在运行的exe文件
- javascript - 在 XLSX 样式中查看方向不要更改为 rtl
- python - 重命名lxml中的对象
- java - 接受任何枚举作为参数
- html - 将单选按钮 3 与 3 对齐并在同一行上导出文件
- excel - VBA 脚本仅在第二次运行时更新 Excel 中的 MySQL 查询
- c# - 如何使异步任务列表将元素添加到可观察集合?
- fastapi - 如何将 aws-xray 集成到快速 api 中?