拦截双重属性javascript函数,如document.getElementById

Intercept double properties javascript function like document.getElementById

本文关键字:document getElementById 函数 javascript 属性      更新时间:2023-09-26

我有一个JavaScript脚本,里面有很多这样的函数

document.getElementById(id)

并且我不希望脚本在此函数的任何未定义返回时停止,因此解决方案是使用钩子类似的函数拦截任何调用,我使用以下代码进行拦截:

var f = document.getElementById.bind(document);
    document.getElementById = function (id) {
        if(f(id) !== null) return true;
    return false;
}
window.onload = function () {
    document.getElementById('ajax').style.display = "block";
}
现在,这个脚本对于一级链接属性工作得很好,像这样:
document.getElementById("html").innerHtml = "Hello"

document.getElementById("txt").disabled = true;

脚本将绕过该函数,并且在返回false时不会抛出任何错误,但是当添加另一个属性时,像这样:

document.getElementById('ajax').style.display = "block";

则脚本将抛出:

TypeError: . getelementbyid(…)。样式未定义

如果我们有一些东西导致脚本死亡时发现结果为null(没有DOM元素与该id)从函数挂钩,这将解决问题,但我找不到做死亡或退出函数,而不是返回false。

您的替换函数返回truefalse。它永远不会返回real document.getElementById()的原始返回值。

如果您真的想让这样的事情工作,您将需要返回一个对象,该对象模拟代码可能期望从真正的DOM节点获得的许多DOM api。只返回false不会使任何事情变得更好。