Android M Webview(启用多窗口支持)在链接类型为“时不打开锚定标记”;“诺弗勒”;
我有一个webview,它加载一个包含一些锚定标签的网站。此锚定标记的类型为“noreferrer”,并在新选项卡中打开一页(使用target=“\u blank”)。现在的问题是,当我没有在webview中启用多窗口支持时,它可以在所有设备上正常工作 但当我启用多窗口支持时,它在棉花糖设备中不起作用,但在所有其他设备中都可以正常工作。我已经创造了一个复制它。当我从锚标记中删除rel=“noreferrer”时,它在所有情况下都可以正常工作 我的活动代码在这里Android M Webview(启用多窗口支持)在链接类型为“时不打开锚定标记”;“诺弗勒”;,android,android-webview,anchor,Android,Android Webview,Anchor,我有一个webview,它加载一个包含一些锚定标签的网站。此锚定标记的类型为“noreferrer”,并在新选项卡中打开一页(使用target=“\u blank”)。现在的问题是,当我没有在webview中启用多窗口支持时,它可以在所有设备上正常工作 但当我启用多窗口支持时,它在棉花糖设备中不起作用,但在所有其他设备中都可以正常工作。我已经创造了一个复制它。当我从锚标记中删除rel=“noreferrer”时,它在所有情况下都可以正常工作 我的活动代码在这里 public class Main
public class MainActivity extends AppCompatActivity {
private RelativeLayout mContainer;
private WebView mWebView;
private WebView mNewWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContainer = (RelativeLayout) findViewById(R.id.container);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setSupportMultipleWindows(true);
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
mNewWebView = new WebView(MainActivity.this);
mNewWebView.setLayoutParams(new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT
));
WebSettings webSettings = mNewWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
mNewWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.clearHistory();
}
});
mContainer.addView(mNewWebView);
((WebView.WebViewTransport) resultMsg.obj).setWebView(mNewWebView);
resultMsg.sendToTarget();
return true;
}
});
mWebView.setWebViewClient(new WebViewClient());
mWebView.loadData("<a href=\"https://example.com\" target=\"_blank\" rel=\"noreferrer\">open new window</a>",
"text/html", "utf-8");
}
@Override
public void onBackPressed() {
if (mNewWebView != null) {
if (mNewWebView.canGoBack()) {
mNewWebView.goBack();
} else {
mNewWebView.destroy();
mContainer.removeViewAt(1);
mNewWebView = null;
}
} else if (mWebView != null && mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.treebo.test.MainActivity">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
public类MainActivity扩展了AppCompatActivity{
私人亲戚;
私有网络视图;
私有网络视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContainer=(RelativeLayout)findViewById(R.id.container);
mWebView=(WebView)findViewById(R.id.WebView);
WebSettings WebSettings=mWebView.getSettings();
setJavaScriptEnabled(true);
setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setSupportMultipleWindows(真);
mWebView.setWebChromeClient(新WebChromeClient(){
@凌驾
public boolean onCreateWindow(WebView视图、boolean isDialog、boolean IsUser手势、Message ResultsMg){
mNewWebView=newwebview(MainActivity.this);
MNEWEBVIEW.setLayoutParams(新的RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_父级,
RelativeLayout.LayoutParams.MATCH_父项
));
WebSettings WebSettings=mNewWebView.getSettings();
setJavaScriptEnabled(true);
setJavaScriptCanOpenWindowsAutomatically(true);
mNewWebView.setWebViewClient(新的WebViewClient(){
@凌驾
公共void onPageFinished(WebView视图,字符串url){
super.onPageFinished(视图、url);
view.clearHistory();
}
});
mContainer.addView(mnewebview);
((WebView.WebView传输)resultsg.obj).setWebView(mNewWebView);
结果sg.sendToTarget();
返回true;
}
});
setWebViewClient(新的WebViewClient());
mWebView.loadData(“,
“文本/html”、“utf-8”);
}
@凌驾
public void onBackPressed(){
如果(mNewWebView!=null){
if(mNewWebView.canGoBack()){
mNewWebView.goBack();
}否则{
mNewWebView.destroy();
mContainer.removeViewAt(1);
mNewWebView=null;
}
}else if(mWebView!=null&&mWebView.canGoBack()){
mWebView.goBack();
}否则{
super.onBackPressed();
}
}
}
我的布局文件
public class MainActivity extends AppCompatActivity {
private RelativeLayout mContainer;
private WebView mWebView;
private WebView mNewWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContainer = (RelativeLayout) findViewById(R.id.container);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setSupportMultipleWindows(true);
mWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
mNewWebView = new WebView(MainActivity.this);
mNewWebView.setLayoutParams(new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT
));
WebSettings webSettings = mNewWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
mNewWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.clearHistory();
}
});
mContainer.addView(mNewWebView);
((WebView.WebViewTransport) resultMsg.obj).setWebView(mNewWebView);
resultMsg.sendToTarget();
return true;
}
});
mWebView.setWebViewClient(new WebViewClient());
mWebView.loadData("<a href=\"https://example.com\" target=\"_blank\" rel=\"noreferrer\">open new window</a>",
"text/html", "utf-8");
}
@Override
public void onBackPressed() {
if (mNewWebView != null) {
if (mNewWebView.canGoBack()) {
mNewWebView.goBack();
} else {
mNewWebView.destroy();
mContainer.removeViewAt(1);
mNewWebView = null;
}
} else if (mWebView != null && mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.treebo.test.MainActivity">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
很少有指针:
- 使用webview.getSettings().setSupportMultipleWindows(true)启用多窗口支持。我正在做这一个webview定义了一个布局文件
- 当我单击锚点时,它会打开一个新页面,并调用onCreateWindow(),在这里我创建了一个新的webview并将其添加到视图层次结构中
专业贴士:没有必要告诉我们你被困多久了(没有更快的答案),也没有必要告诉我们你找不到任何解决办法(如果你解决了,你就不会要求),也没有明确的帮助请求(这可能就是你来这里的原因)。如果可以的话,尽量保持简短-太多的聊天会阻止人们阅读。谢谢。下次我会处理这些事情:)首先,在评论中提问,而不是在回答部分。您可以检查附加的项目链接。我不会打开任何片段或活动。Html页面有一个锚定标记,该标记具有以下属性rel=“noreferrer”。单击此锚定标记后,它将在“新建”选项卡中打开一个新的html页面。默认情况下,新页面将在同一webview中打开。但要在新的webview中打开它,我们必须启用多窗口支持。我不清楚你的问题。我