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

为什么Safari通过了我编写的WebRTC相关Modernizr兼容性测试?

问题原因

你的测试逻辑存在缺陷,Function.length 属性仅返回函数定义中必填位置参数的数量,无法验证该函数是否真的实现了对应可选参数的功能逻辑。

Safari 14.1 正是存在这个不一致的情况:WebKit 内核当时在跟进WebRTC规范更新时,先修改了setLocalDescription的方法签名,将description参数标记为可选,因此该方法的length属性变为0,通过了你的测试。但该版本并未实际实现无参数调用setLocalDescription的对应功能(无参数调用时会自动使用当前待处理的会话描述作为入参),因此CanIUse上依旧标记该版本不支持该特性。

你最初在控制台得到length为3的结果,是因为webrtc-adapter加载后会覆盖原生的setLocalDescription方法,修改了函数的参数结构,所以和你测试时拿到的原生方法length不一致。

正确测试方案

如果要得到准确的测试结果,需要改用实际调用验证的异步测试方案,而不是仅判断函数的length属性:

window.Modernizr.addTest('paramlessrtclocaldescription', function () {
    // Modernizr 异步测试返回函数,调用done传递结果
    return async function (done) {
        if (!window.RTCPeerConnection) return done(false);
        const peerConn = new RTCPeerConnection();
        try {
            const offer = await peerConn.createOffer();
            // 先手动设置一次确保协商状态正常
            await peerConn.setLocalDescription(offer);
            // 尝试无参数调用验证功能
            await peerConn.setLocalDescription();
            done(true);
        } catch (err) {
            done(false);
        } finally {
            peerConn.close();
        }
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 19:15:02