mark 一下,android 下的解决方案,需要修改 flutter_webview 的 android sdk
打开 webview_flutter 的缓存位置,找到
`.\android\src\main\java\io\flutter\plugins\webviewflutter\FlutterWebView.java`
在 FlutterWebView 的构造函数 FlutterWebView 的
```
// Allow local storage.
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
```
下方添加上允许加载打开多页面(因为我使用的广告代码中使用了`<a target="_blank">`)
```
// todo:fix _target="_blank" in iframe tag
webView.getSettings().setSupportMultipleWindows(true);//代表支持多窗口打开
webView.setWebChromeClient(new WebChromeClient() {
@
Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
WebView newWebView = new WebView(view.getContext());
newWebView.setWebViewClient(new WebViewClient() {
@
Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 在此处进行跳转 URL 的处理, 一般情况下_black 需要重新打开一个页面, 这里我直接让当前的 webview 重新 load 了 url
webView.loadUrl(url);
/* 或使用默认浏览器打开
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
*/
return true;
}
});
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
return true;
}
});
```
两处注释分别是直接在原 webview 页面 t 中跳转到广告或使用默认浏览器打开广告,各有利弊,使用时酌情选择,ios 端不会改。