【问题标题】:Prevent a function to be overriden again防止函数再次被覆盖
【发布时间】:2022-11-18 19:38:42
【问题描述】:

在加载 loadPlayer 后,我从外部源加载了一个脚本,看起来像

function loadElement() {
    new YT.Player('youtube', {})    
}

我也在我的 TS 文件中使用

function loadPlayer() {
    new window.YT.Player('youtube id', { ...somesettings })
}

然而,loadPlayer 函数首先被执行,然后loadElement 正在创建新的 YT Player 对象,这是我不希望发生的。有什么方法可以防止这种情况发生吗?我尝试在 loadPlayer 中添加对象冻结或使用代理播放,但它似乎不起作用。此外,我无法删除外部脚本。我需要做一些解决方法。

【问题讨论】:

  • “但是,首先加载函数 loadPlayer ......”是不是加载(创建)首先,或加载和执行第一的?
  • 抱歉,首先执行loadPlayer,然后执行loadElement并覆盖YT.Player对象

标签: javascript


【解决方案1】:

几个选项供您选择:

  1. 覆盖window.YT.Player,只有你可以使用它。

  2. 完全阻止其他脚本加载。

    覆盖window.YT.Player,所以只有你可以使用它

    假设它不是不可配置的绑定,您可以从 loadPlayer 中覆盖 YT.Player 属性:

    let OriginalYTPlayer;
    function loadPlayer() {
        new window.YT.Player('youtube id', { ...somesettings })
        OriginalYTPlayer = window.YT.Player;
        window.YT.Player = function() { };
    }
    

    这使得对 YT.Player 的任何调用都不执行任何操作。如果需要使用,可以使用OriginalYTPlayer代替。当然,这可能会弄乱您所依赖但未提及的其他内容。

    阻止加载其他脚本

    假设另一个脚本是脚本,不是一个模块,它是加载加载脚本后,您可以通过使用 let 或 const 自己定义 loadElement 来破坏它并阻止它加载:

    function loadPlayer() {
        // ...
    }
    const loadElement = null;
    

    然后,当加载另一个脚本时,它会报错:

    <script>
    const loadElement = null;
    </script>
    <script>
    function loadElement() {
        new YT.Player('youtube', {})    
    }
    </script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-27
    • 2017-05-29
    • 1970-01-01
    • 2019-07-14
    • 2017-12-19
    • 2021-02-08
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多