GeckoView不处理target="_blank"及JS window.open?如何在当前GeckoSession加载新窗口?
让GeckoView在当前会话加载新标签/窗口请求的设置方法
GeckoView默认不会响应target="_blank"链接或JS的window.open()调用,要让这类请求在当前GeckoSession中加载,有两种可行方案:
1. 全局配置会话设置
通过GeckoSessionSettings直接指定新窗口的行为为在当前标签加载,这是最简便的全局设置方式:
val sessionSettings = GeckoSessionSettings.Builder() .setNewWindowBehavior(GeckoSessionSettings.NewWindowBehavior.CURRENT_TAB) .build() val geckoSession = GeckoSession(sessionSettings)
配置后,所有新窗口请求都会自动在当前会话中加载,无需额外拦截处理。
2. 拦截新会话请求自定义处理
如果需要更灵活的控制(比如根据URL决定是否在当前会话加载),可以实现SessionDelegate的onNewSession回调,手动取消新会话创建并在当前会话加载目标URL:
geckoSession.setSessionDelegate(object : GeckoSession.SessionDelegate { override fun onNewSession( session: GeckoSession, prompt: GeckoSession.SessionDelegate.NewSessionPrompt ) { // 取消默认的新会话创建流程 prompt.cancel() // 在当前会话加载请求的URL session.loadUri(prompt.uri) } })
这种方式可以根据业务需求添加额外判断逻辑,比如对特定域名的链接才采用当前会话加载。
内容的提问来源于stack exchange,提问作者Matt Bennett
相关产品推荐
相关产品推荐

