Javascript - 覆盖或阻止执行

时间:2009-05-11 21:06:52

标签: javascript jquery

我正在开发一个客户端项目,我必须包含它们的页眉和页脚,其中包括一些核心javascript文件。我在页面上有几个PNG,但是它们的核心JS文件编码很差,并且在尝试用包含使用AlphaImageLoader过滤器的DIVS替换包含.png文件的IMG标记之前不检查IE 7。结果是在IE 7中,所有我的.png图像都被替换为具有默认display:block的DIV标记,导致在我的页面中的每个png图像之后出现换行符。

我想要做的是用更好的方法覆盖它们的功能或以某种方式阻止它们执行,但是我不能修改js文件本身,它们定义了函数并将它附加到窗口onload事件。我已经尝试在几个地方重新定义相同名称下的函数(标题,就在/ body标记之前,在$(document).ready等等...)但原始函数似乎总是执行,大概是因为原来的函数代码是与事件处理程序一起存储的函数,而不仅仅是指向函数的指针。

我能解决什么?有没有办法有选择地删除onload事件处理程序?

7 个答案:

答案 0 :(得分:1)

如果这是唯一在加载时运行的东西,我认为你可以做到

window.onload = null;

如果有其他事情在运行,我想你必须重新连接它们。我想,它有点脆弱。

答案 1 :(得分:1)

在IE7中,您可以使用detachEvent方法: -

window.detachEvent("load", fn)

其中fn是附加的函数,但是因为在这个混合中有jquery,所以可能是一个很高的命令来获取附加的实际函数。最有可能附加的实际功能是匿名的。

答案 2 :(得分:0)

标题和;之间的大IFRAME;页脚应该可以做到。

答案 3 :(得分:0)

嗯,取决于它是如何绑定的,你可能会得到类似的东西:

window.onload = function(){
  var alert=function(a){
    console.log(a);
  }
  window.onload();
}

显然,你想要重新定义除警报之外的其他东西,但这可能有效。

答案 4 :(得分:0)

也许如果就是这样,你可以编写一个函数来反转它,查找所有png图像并剥离div,如果你想跳过某些图像,你可以将属性植入你想要区别对待的那些

另一种方法是通过不使用图像文件名的png部分来欺骗该函数,并在加载时附加.png(在它们的onload之后)

或者您可以用其他标签替换您的png图像,并替换onload

顺便说一句,你可以确切知道onload里面的内容,如果你只是提醒window.onload,如果只有那个功能,请设置window.onload = null;

答案 5 :(得分:0)

您是否尝试过使用$(window).unbind("load")

答案 6 :(得分:0)

您知道替换PNG图像的功能名称吗?如果是这样,您可以通过执行以下操作来覆盖现有函数:

// Assuming PNG function is called pngSwap
function pngSwap() {
    alert('png swap');              
}

$(document).ready(function() {
    if (window.pngSwap && window.pngSwap.constructor === Function) {
        var oldFunc = window.pngSwap;
        window.pngSwap = function() {
            alert('new png swap');
        }
    }

    pngSwap();
});