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

如何改造src_observer方法支持传入自定义函数与元素实现逻辑复用

实现方案

该需求完全可以实现,核心思路是把固定的src变化触发逻辑抽离为可传入的自定义回调函数,同时支持传入自定义上下文参数供回调内部使用。

改造后的src_observer方法

function src_observer(target_node, options = {}) {
    // 解构参数,保留原有默认逻辑作为降级,旧代码无需修改即可正常运行
    const { 
        callback = () => {
            target_node.show();
            target_node.next().remove();
        }, 
        ...customParams 
    } = options;

    let observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.attributeName === 'src') {
                // 执行回调,将mutation、监听目标节点、自定义参数全部透出
                callback(mutation, target_node, customParams);
            }
        });
        observer.disconnect();
    });

    // 兼容JQuery对象和原生DOM节点两种传入格式
    observer.observe(target_node[0] ?? target_node, {
        attributes: true,
        attributeFilter: ['src']
    });
}

调用示例

原有业务场景(无兼容成本)

原有调用方式无需修改即可沿用旧逻辑:

src_observer(your_target_node);

新自定义业务场景

const target_node = videoWrapper.html(videoElement).children('iframe');
// 传入自定义逻辑和需要的额外元素
src_observer(target_node, {
    videoWrapper,
    element,
    cover,
    callback: (mutation, target_node, params) => {
        const { videoWrapper, element, cover } = params;
        videoWrapper.parents().eq(1).children('.onetrust_container').remove();
        videoWrapper.parent().show();
        videoWrapper.show();
        element.fadeOut(500);
        cover.fadeOut(500);
    }
});

方案说明

  • 不需要预先定义固定的参数字段名,支持传入任意自定义参数,灵活性更高
  • 完全兼容现有两种代码的节点获取逻辑,无需额外调整业务代码
  • 支持后续任意新增的src监听业务场景,无需重复编写MutationObserver基础逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:09