Javascript:点击注入的按钮

Javascript: Click on an injected button?

本文关键字:按钮 注入 Javascript      更新时间:2023-09-26

我的问题可能看起来很奇怪,但我希望我的javascript代码点击我之前用相同脚本在页面中注入的按钮。我尝试了这样的事情:

var injectionarea = document.getElementById('whereIwant');
injectionarea.innerHTML += "<button id='"my_button'">Test</button>";
document.getElementById('my_button').onclick = function() {
                                                            //my stuff
                                                          };
my_button.click();

但它返回一个未定义的元素...

您尝试执行的操作存在一些问题。作为一般规则,将 dom 控件作为字符串注入可能会产生一些奇怪的事件(例如,容器元素中的任何子节点都可能恢复到原始页面状态)。因此,最好通过document.createElement函数创建对象。

无论如何,在您的情况下,您只需要"等待"dom读取您的注入,解析它并创建元素(如上所述,您应该自己做的事情)。

因此,添加 setTimeout(如以下示例所示)将使其正常工作,即使它不是我希望看到的最干净的代码段:

var injectionarea = document.getElementById('whereIwant');
injectionarea.innerHTML += "<button id='"my_button'">Test</button>";
setTimeout(function(){
   document.getElementById('my_button').onclick = function() {
                                                            //my stuff
                                                          };
   my_button.click();
},0);

永远记住,JS是单线程的,所以你所做的任何需要由DOM解析的编辑,在你释放你的工作线程之前,在DOM本身中都不可用。

试试这个:

function a(){
    var injectionarea = document.getElementById('whereIwant');
    injectionarea.innerHTML += "<button id='"my_button'" onclick='"doClick()'">Test</button>";
}
function doClick(){
//my stuff
}