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

时间:2016-09-01 19:28:27

标签: javascript

我有一个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;

脚本将绕过该函数并且不会在返回错误时抛出任何错误,但是当添加另一个类似于此的propoerty时:

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

然后脚本将抛出:

  

TypeError:document.getElementById(...)。style未定义

如果我们有什么东西导致脚本在从函数钩子中找到结果为null(没有带有该id的DOM元素)时死亡,那将是唯一的问题,但我找不到做死或退出函数其他而不是返回虚假。

1 个答案:

答案 0 :(得分:0)

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

如果你真的想要做类似的工作,你需要返回一个对象来模拟许多代码可能期望从真正的DOM节点获得的DOM API。只返回false并不会让事情变得更好。