android - kotlin如何使用新的webView打开一个javascript的window.open
问题描述
我参考了这个,我想在遇到时打开一个新的 webView window.open
。我尝试使用硬代码打开 Google 页面,这是我的代码
class MainActivity : AppCompatActivity() {
private var myWebView: WebView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
myWebView = findViewById(R.id.webview)
myWebView!!.settings.javaScriptEnabled = true
myWebView!!.settings.domStorageEnabled = true
myWebView!!.settings.setSupportMultipleWindows(true)
myWebView!!.settings.javaScriptCanOpenWindowsAutomatically = true
myWebView!!.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
view?.loadUrl(url)
return true
}
}
myWebView!!.webChromeClient = object : WebChromeClient() {
....
override fun onCreateWindow(
view: WebView,
dialog: Boolean,
userGesture: Boolean,
resultMsg: android.os.Message
): Boolean {
var cookieValues: HashMap<String, String> = _parseCookie(view.url)
var tokenData: HashMap<String, String> = HashMap()
val newWebView = WebView(view.context)
view.addView(newWebView)
newWebView.settings.javaScriptEnabled = true
newWebView.settings.setSupportZoom(true)
newWebView.settings.builtInZoomControls = true
newWebView.settings.setSupportMultipleWindows(true)
val transport = resultMsg.obj as WebView.WebViewTransport
transport.webView = newWebView
resultMsg.sendToTarget()
newWebView.webViewClient = object : WebViewClient(){
override fun shouldOverrideUrlLoading(
view: WebView, url: String
): Boolean {
view.loadUrl("https://www.google.com")
return true
}
}
return true
}
}
myWebView!!.loadUrl("http://www.example.com")
}
....
}
它的工作,但新的 webView 大小没有满屏,我点击搜索输入,这个应用程序关闭,我收到了这条消息。
E/EGL_emulation: tid 8491: eglSurfaceAttrib(1354): error 0x3009 (EGL_BAD_MATCH)
W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xd623bbc0, error=EGL_BAD_MATCH
W/cr_AwAutofillManager: Application attempted to call on a destroyed AwAutofillManager
java.lang.Throwable
at org.chromium.android_webview.AwAutofillManager.checkAndWarnIfDestroyed(AwAutofillManager.java:18)
at org.chromium.android_webview.AwAutofillProvider.startAutofillSession(AwAutofillProvider.java:98)
at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:9)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
W/cr_AwAutofillManager: Application attempted to call on a destroyed AwAutofillManager
java.lang.Throwable
at org.chromium.android_webview.AwAutofillManager.checkAndWarnIfDestroyed(AwAutofillManager.java:18)
at org.chromium.android_webview.AwAutofillManager.notifyVirtualViewEntered(AwAutofillManager.java:11)
at org.chromium.android_webview.AwAutofillProvider.startAutofillSession(AwAutofillProvider.java:103)
at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:9)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6680)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
这是我的activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
我该如何解决?谢谢你的帮助。
解决方案
这对我有用,我需要设置layoutParams
为新的 webView。所以我重用了原来的视图布局。
newWebView.layoutParams = view.layoutParams
推荐阅读
- php - 用于运行 PHP 服务的 XAMPP 虚拟主机
- python - Google Sheets API - Python - 不带括号的单元格的返回值
- android - Android 代理配置后无法上网
- python - python kivy NameError:名称'_name_'未定义
- google-cloud-platform - 云函数中的 getSignedUrl Promise 权限被拒绝
- python - 如何为每第 n 个句子换行?
- python - PyQt5 - 第二个窗口中的按钮在单击时不执行操作
- javascript - 如何在 django 中使用 @ 提及用户
- sql - Postgres:整数范围的唯一约束
- excel - 将数据转移到不同的列并“刷新”它们以占用空白空间