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

如何在Chrome中通过JavaScript调用自定义协议处理器且不触发弹窗?

解决方案

你可以通过隐藏iframe加载自定义协议地址的方式实现无弹窗调用,完全避免触发弹窗拦截规则,改造后的代码如下:

function setBrowser() {
    var userAgent = navigator.userAgent.toLowerCase();
    if (userAgent.indexOf("chrome") > -1) {
        // 构造自定义协议调用地址
        var url = 'ABCProcessLaunch:-Domain mydomain -Args http://google.com -requirelogin true -method "chrome"';            
        // 创建隐藏的iframe元素
        const invokeIframe = document.createElement('iframe');
        invokeIframe.style.display = 'none';
        invokeIframe.src = url;
        document.body.appendChild(invokeIframe);
        // 调用完成后移除iframe,避免残留无用DOM
        setTimeout(() => {
            document.body.removeChild(invokeIframe);
        }, 100);
    }
}
方案说明
  • 核心逻辑是将自定义协议地址作为普通资源交给iframe加载,Chrome会自动识别自定义协议并拉起对应应用,全程不会产生新窗口,不会触发弹窗拦截规则
  • 无需处理窗口关闭逻辑,也不会影响当前页面的正常交互
可选兼容方案

如果你的调用逻辑是在用户点击、按钮触发等用户交互事件的同步执行流程中,也可以直接修改当前页面地址:

window.location.href = url

该方案同样不会产生新窗口,但如果用户设备未注册对应自定义协议,会导致当前页面跳转到错误页,兼容性弱于iframe方案。

注意事项
  • 如果需要处理自定义协议未注册的异常场景,可以在加载iframe后设置2s左右的定时器,若定时器触发后未收到应用拉起的回调,可向用户提示未安装对应应用
  • 自定义协议中包含的参数如果有特殊字符、中文等内容,建议先通过encodeURIComponent()编码后再拼接,避免协议解析异常

内容的提问来源于stack exchange,提问作者pldiguanaman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:57:03