我正在加载特定的网址
例如.
webvIEw.loadUrl("some.domain.com")
余言之后,我将其重定向到其他域,然后返回到我的域.然后,我尝试在我的JavaScript(window.close())中关闭窗口.在Chrome开发人员工具上进行远程调试时,出现以下错误
Scripts may close only the windows that were opened by it.
即使我在打开它的同一个域中,也遇到了以上错误.
任何帮助将不胜感激.谢谢.
解决方法:
这个答案将从AndroID App Developer的角度来看.
希望对您有所帮助.
对我来说,问题非常相似:我正在通过webvIEw打开一个网站,并且某些链接在新窗口中打开.问题是webvIEw不能与Web窗口一起使用.我的意思是,这是可能的,但是却没有达到预期的效果(以我为例,当从JavaScript角度在单独的窗口中打开链接时,它覆盖了先前打开的页面,并且无法用JavaScript的window.close()关闭,最终导致前一页出现状态丢失).
因此,在我的案例中,任务是在窗口中打开单个链接,然后返回上一页而不会造成任何状态损失.那是我的解决方案.
我有两个单独的WebVIEw,一个是主要的,另一个是用于窗口链接的.
为了能够对“新窗口中的链接”事件做出反应,我将使用以下代码配置主webVIEw:
webVIEw.settings.JavaScriptEnabled = true webVIEw.settings.JavaScriptCanopenwindowsautomatically = true webVIEw.settings.setSupportMultiplewindows(true) webVIEw.webChromeClIEnt = object : WebChromeClIEnt() { overrIDe fun onCreateWindow(vIEw: WebVIEw?, isDialog: Boolean, isUserGesture: Boolean, resultMsg: Message?): Boolean { handleCreateWebWindowRequest(resultMsg) return true }}
我们只需要onCreateWindow回调在主webVIEw Chrome客户端中进行覆盖,因为它只会打开新窗口.并且还允许在webVIEw.settings中提供多窗口支持.当onCreateWindow回调触发时,请执行以下 *** 作:
@Suppresslint("SetJavaScriptEnabled")overrIDe fun handleCreateWebWindowRequest(resultMsg: Message?) { if (resultMsg == null) return if (resultMsg.obj != null && resultMsg.obj is WebVIEw.WebVIEwTransport) { val transport = resultMsg.obj as WebVIEw.WebVIEwTransport windowWebVIEw = WebVIEw(this) windowWebVIEw?.layoutParams = VIEwGroup.LayoutParams( VIEwGroup.LayoutParams.MATCH_PARENT, VIEwGroup.LayoutParams.MATCH_PARENT) windowWebVIEw?.settings?.JavaScriptEnabled = true windowWebVIEw?.settings?.JavaScriptCanopenwindowsautomatically = true windowWebVIEw?.settings?.setSupportMultiplewindows(true) windowWebVIEw?.webVIEwClIEnt = WebVIEwClIEnt() windowWebVIEw?.webChromeClIEnt = object : WebChromeClIEnt() { overrIDe fun onCloseWindow(window: WebVIEw?) { super.onCloseWindow(window) handleCloseWebWindowRequest() } } container.addVIEw(windowWebVIEw) webVIEw.visibility = VIEw.GONE transport.webVIEw = windowWebVIEw resultMsg.sendToTarget() }}
基本上,我们是将此(创建窗口)请求发送到单独的webVIEw.在其中,我们还应该允许多窗口支持并附加Chrome客户端,在此情况下,我们仅应侦听onCloseWindow事件,因为此webVIEw应该充当窗口.当onCloseWindow触发时,我们只是关闭(隐藏/删除)应该作为窗口的webVIEw,然后返回到主窗口.这里isWebWindowOpened方法调用仅检查windowWebVIEw是否不为null且不可见.
private fun handleCloseWebWindowRequest() { if (!isWebWindowOpened()) return container.removeVIEw(windowWebVIEw) webVIEw.visibility = VIEw.VISIBLE windowWebVIEw = null}
我唯一能提到的是,当打开windowWebVIEw时,onBackpressed *** 作应将其关闭,并调用handleCloseWebWindowRequest.
总结以上是内存溢出为你收集整理的Android Webview:脚本可能只关闭由它打开的窗口全部内容,希望文章能够帮你解决Android Webview:脚本可能只关闭由它打开的窗口所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)