打开 target="_blank" 与 Xamarin.Forms WebView 的链接
Opening target="_blank" links with Xamarin.Forms WebView
我最近遇到了 target
属性设置为 _blank
的链接问题。轻敲它们没有效果。 WebView
不加载链接页面。
四处搜索我找到了这个解决方案:https://github.com/xamarin/Xamarin.Forms/issues/12917 which is setting SetSupportMultipleWindows(false)
. More specifically the suggestion is 插入以下代码行:webView.Settings.SetSupportMultipleWindows(true);
.
尝试出现以下错误:Error CS1061 'WebView' does not contain a definition for 'Settings' and no accessible extension method 'Settings' accepting a first argument of type 'WebView' could be found (are you missing a using directive or an assembly reference?)
有没有办法克服这个错误?
您可以在 Hybrid 渲染器 的 OnElementChanged 中添加对多个 windows 的支持,代码为:
Control.Settings.SetSupportMultipleWindows(true);
编辑:
public class MyWebViewRenderer : WebViewRenderer
{
public MyWebViewRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if(Control!=null)
{
Control.Settings.SetSupportMultipleWindows(true);
Control.Settings.JavaScriptEnabled = true;
Control.SetWebChromeClient(new MyWebChromeClient());
}
}
}
public class MyWebChromeClient: WebChromeClient
{
public override bool OnCreateWindow(Android.Webkit.WebView view, bool isDialog, bool isUserGesture, Message resultMsg)
{
if(!isDialog)
{
return true;
}
return base.OnCreateWindow(view, isDialog, isUserGesture, resultMsg);
}
}
}
在朝着错误的方向多次尝试后,我找到了适合我的代码行。在 Custom Webview Renderer
中的 OnElementChanged
方法的覆盖中,这是使打开具有 target=_blank
属性的链接成为可能的代码:
Control.Settings.SetSupportMultipleWindows(false);
SetSupportMultipleWindows;
应设置为 false,而不是 true 正如建议的那样。
我最近遇到了 target
属性设置为 _blank
的链接问题。轻敲它们没有效果。 WebView
不加载链接页面。
四处搜索我找到了这个解决方案:https://github.com/xamarin/Xamarin.Forms/issues/12917 which is setting SetSupportMultipleWindows(false)
. More specifically the suggestion is 插入以下代码行:webView.Settings.SetSupportMultipleWindows(true);
.
尝试出现以下错误:Error CS1061 'WebView' does not contain a definition for 'Settings' and no accessible extension method 'Settings' accepting a first argument of type 'WebView' could be found (are you missing a using directive or an assembly reference?)
有没有办法克服这个错误?
您可以在 Hybrid 渲染器 的 OnElementChanged 中添加对多个 windows 的支持,代码为:
Control.Settings.SetSupportMultipleWindows(true);
编辑:
public class MyWebViewRenderer : WebViewRenderer
{
public MyWebViewRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if(Control!=null)
{
Control.Settings.SetSupportMultipleWindows(true);
Control.Settings.JavaScriptEnabled = true;
Control.SetWebChromeClient(new MyWebChromeClient());
}
}
}
public class MyWebChromeClient: WebChromeClient
{
public override bool OnCreateWindow(Android.Webkit.WebView view, bool isDialog, bool isUserGesture, Message resultMsg)
{
if(!isDialog)
{
return true;
}
return base.OnCreateWindow(view, isDialog, isUserGesture, resultMsg);
}
}
}
在朝着错误的方向多次尝试后,我找到了适合我的代码行。在 Custom Webview Renderer
中的 OnElementChanged
方法的覆盖中,这是使打开具有 target=_blank
属性的链接成为可能的代码:
Control.Settings.SetSupportMultipleWindows(false);
SetSupportMultipleWindows;
应设置为 false,而不是 true 正如建议的那样。