2011-12-05 66 views
1

我有一个函数A()执行document.write()的脚本标记。由于它来自第三部分脚本,因此我无法访问A()。用另一个替换document.write的函数

//block1 
<script type="text/javascript"> 
    A(); 
</script> 

我没有任何的ID /类钩块1,但是我可以介绍一个前一个函数调用()这样的。

<script type="text/javascript"> 
    B(); 
    A(); 
</script> 

我想B()函数来代替块1到

<script type="text/javascript"> 
    C(); 
</script>  
// or keep as is 
<script type="text/javascript"> 
    A(); 
</script> 

这是可能的,我应该怎么做呢?

回答

0

也许你可以改为猴子补丁?

A = C; 

这将改变所有未来呼叫到A调用C代替。这可能或可能不是你想要的。

+0

感谢抗碎裂()A被称为网页上多次,因此规则了这一点。 – Yogesh

+1

虽然递归调用?也有可能做'oldA = A; A = C;一个(); A = oldA' – hugomg

+0

+1这不是,但我不能删除A();并且只能添加B();.以上解决方案将使其执行两次。 – Yogesh

4

如果您可以在A()被定义之后但在被调用之前插入代码(可能不可能),那么您可以重新定义A(),就像您在JavaScript中定义任何其他函数一样。

如果这不可行,您可以在调用A()之前重新定义document.write,然后在调用A()后撤销该操作。例如:

var write = document.write; 
document.write = function(s) 
{ 
    //do nothing, or whatever you want 
    console.log(s); 
} 
//then, after A(), just do: 
document.write = write; 
+0

+1这有点用处。虽然有一个问题是B()可能会用A()代替块。在上面的例子中,A()将会再次被调用,这是我不想要的。 – Yogesh

+0

感谢wsanville,这对于我正在使用的一些脚本非常有用,那就是复制并替换一个有document.write的html块。在看到这些后立即修复。 – CommentLuv