使用javascript向元素添加事件侦听器

使用javascript向元素添加事件侦听器,javascript,html,iframe,Javascript,Html,Iframe,通过我在外部站点上插入的脚本标记,我试图加载一些javascript,它将我在网页上托管的小部件框架化, 我只希望小的启动图标iFrame最初,然后当它打开时,iFrame整个聊天窗口时,它的扩展。因为Iframing整个事情占用了大量的外部站点,意味着后面的一切都无法访问 我的想法是先创建一个小iframe,然后单击它时,将其大小增加到整个窗口,然后在启动程序所在区域添加一个元素,然后在按下时关闭它并再次减小iframe大小!哈奇,我知道,但我不知道我还能怎么做 您可以看到我创建了一个ifra

通过我在外部站点上插入的脚本标记,我试图加载一些javascript,它将我在网页上托管的小部件框架化, 我只希望小的启动图标iFrame最初,然后当它打开时,iFrame整个聊天窗口时,它的扩展。因为Iframing整个事情占用了大量的外部站点,意味着后面的一切都无法访问

我的想法是先创建一个小iframe,然后单击它时,将其大小增加到整个窗口,然后在启动程序所在区域添加一个元素,然后在按下时关闭它并再次减小iframe大小!哈奇,我知道,但我不知道我还能怎么做

您可以看到我创建了一个iframe,并尝试给它一个id “ifrm”的行: 到目前为止的代码是:ifrm.setAttribute(“id”、“ifrm”); . 然后尝试更改iframes CSS或附加一个新的?但是当点击时,它不会调用函数,所以我可以 ID设置/调用错误吗

那么我如何附加一个元素呢?对不起,我可能走错方向了

prepareFrame();

function prepareFrame() {
    console.log("yes this consoles inside of prepareFrame")
    var ifrm = document.createElement("iframe");
    ifrm.setAttribute("src", "https://5efae1b1.ngrok.io");
    ifrm.style.width = "100px";
    ifrm.style.height = "100px";
    ifrm.style.position="fixed";
    ifrm.style.right="0";
    ifrm.style.bottom="0";
    ifrm.style.border="0";
    ifrm.setAttribute("id", "ifrm"); 

    document.body.appendChild(ifrm);

    document.getElementById("ifrm").addEventListener("click", function(){click1(1);}, false);

    }

function click1() {
    alert("calling");   
    document.getElementById("ifrm").style.backgroundColor = '#ff0000';
    colorcheck = document.getElementById("ifrm").style.backgroundColor;
    console.log('colour check' + colorcheck);
  };
如果你能帮忙,非常感谢

不要这样做:

document.getElementsByTagName("iframe")[0].setAttribute("id", "ifrm"); 
在iframe创建开始时尝试以下操作:

var ifrm = document.createElement("iframe");
ifrm.setAttribute('id', 'ifrm'); // assign an id

ifrm.contentDocument.addEventListener(“click”,function(e){click1(e)},false)
添加到prepareFrame函数中,这将调用click1函数。

首先,无需等待附加设置其id,然后再执行此操作,这样可以避免第二次查找,例如
ifrm.setAttribute(“id”,“ifrm”)
ifrm.id='ifrm'
。然后,当涉及到在iframe上单击事件时,请查看以下帖子:在看到您对此的评论之前,我确实对其进行了更改:ifrm.setAttribute(“id”,“ifrm”);文件.body.appendChild(ifrm);然后更新你的代码样本以避免进一步的评论。而且这个函数仍然没有被调用,我发现很难对一些小的东西进行iFrame,然后将iFrame设置为更大的尺寸,以适应不断增加的内容!也许有什么地方我遗漏了iframe没有像其他html元素那样捕捉点击事件…阅读我上面的链接关于添加事件侦听器的问题,未设置id。当然,但如果您的事件侦听器不工作,可能是因为您没有正确设置,并且正如所指出的,您不需要做所有这些来设置id。如果您检查OP的编辑和他们/我的评论,您将看到他们已经进行了更改,使得此答案没有价值。我建议你删除它。是的,但在我回答时它不可见。我只是想帮忙。也许你认为这是设定好的,但没有意识到。