如何通过Chrome扩展程序删除事件监听器

时间:2014-08-20 14:50:50

标签: javascript google-chrome-extension

我需要在加载页面后使用Chrome扩展程序删除以下事件侦听器。

网页内容:

<input type="password" size="15" value="" autocomplete="off"
    onkeyup="javascript:vaciar(this)"
    onkeypress="javascript:vaciar(this)"
    onkeydown="javascript:vaciar(this)" name="password"
id="contrasena" />

我的内容脚本中的代码是:

var password_field = document.getElementById("contrasena");
password_field.removeAttribute("onkeypress");
password_field.removeAttribute("onkeydown");
password_field.removeAttribute("onkeyup");
password_field.onkeypress = null;
password_field.onkeydown = null;
password_field.onkeyup = null;

由于某种原因,事件侦听器保持活动状态,但是当我在控制台中复制并执行代码时,它可以工作。

2 个答案:

答案 0 :(得分:2)

由于上下文脚本存在isolated context,因此失败。

要影响页面上下文设置的处理程序,您需要将上述代码注入页面。

有关规范性解释和示例,请参阅this question

答案 1 :(得分:0)

您是否将重置代码放在body / onload函数中?

‹body onload="resetInput();"›
    ‹input type="password" size="15" value="" autocomplete="off" onkeyup="vaciar(this)" onkeypress="vaciar(this)" onkeydown="vaciar(this)" name="password" id="contrasena" /›
‹/body›

并声明函数

function resetInput(){
    var password_field = document.getElementById("contrasena");
    password_field.removeAttribute("onkeypress");
    password_field.removeAttribute("onkeydown");
    password_field.removeAttribute("onkeyup");
}

在内联活动中,您不需要取消绑定活动。