关于动态生成的iframe内容的Eventlistener不会触发

时间:2017-07-17 10:10:48

标签: javascript iframe google-chrome-extension addeventlistener

我有一个chrome扩展程序,可以将iframe注入已加载的页面。以编程方式生成iframe的内容。它包括一个添加了click事件监听器的按钮。但它似乎并不总是如火如荼。它大部分时间都有效,但有一种情况是它不起作用的是扩展是新加载的(如安装时)。以下是我的代码的要点,你看到任何问题吗?

content.js:

var frame = document.createElement("iframe");

frame.onload = function() {
    var doc = frame.contentDocument || frame.contentWindow.document;

    var closeButton = doc.createElement("input");
    closeButton.type = "button";
    closeButton.value = "X";
    closeButton.addEventListener("click", function() {
        document.body.removeChild(frame);
    });

    doc.body.appendChild(closeButton);
};

document.body.appendChild(frame);

的manifest.json

{
    "name": "eventlistener-bug",
    "version": "0.1",
    "content_scripts": [{
        "run_at": "document_idle",
        "matches": ["http://*/*", "https://*/*"],
        "js": ["content.js"]
    }],
    "permissions": ["http://*/*", "https://*/*"],
    "manifest_version": 2
}

1 个答案:

答案 0 :(得分:0)

到目前为止,看起来这是Chrome中的一个错误。它已被报告并被接受:https://bugs.chromium.org/p/chromium/issues/detail?id=745771

计划在第61版修复。

可能的解决方法是重新添加事件侦听器,例如在iframe的mouseover事件处理程序中。