You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:42:38