【问题标题】:Chrome extension: How to add a button to a page on a web site and add a click handler to it?Chrome 扩展程序:如何向网站上的页面添加按钮并为其添加点击处理程序?
【发布时间】:2017-08-25 16:59:13
【问题描述】:

我正在尝试向第三方网站上的页面动态添加按钮,并使用 Chrome 扩展程序向按钮添加点击处理程序。我已阅读 onClick within Chrome Extension not working,将处理程序添加到单独的 js 文件中。

问题是 Chrome 试图在网络服务器中找到 js 文件,而不是在扩展程序中。所以,404 发生了。

假设网页是“http://www.somecompany.com/somepage.html”。我的扩展代码如下。

    var aButton = document.createElement('button');
    aButton.id = "aButton";
    thatDiv.appendChild(aButton);

    var aScript = document.createElement("script");
    aScript.src="aButtonHandler.js";
    thatDiv.appendChild(aScript);   

Chrome 尝试加载“http://www.somecompany.com/aButtonHandler.js”,当然真实网站没有该脚本,所以会发生 404。如何向网站添加按钮并在单击按钮时执行alert("hello");


添加

我将aButtonHandler.js 中的代码添加到内容脚本本身的末尾,但没有任何反应。怎么了?

内容脚本.js

addButton();

function addButton()
{
    //adds a button by the code above.
}

document.addEventListener('DOMContentLoaded', function() {
    var theButton = document.getElementById('aButton');
    theButton.addEventListener('click', function() {
        alert('damn');
    });
});

添加

这行得通。

内容脚本.js

addButton();

function addButton()
{
    //adds a button by the code above.
    aButton.addEventListener('click', function() {
        alert('damn');
    });
}

【问题讨论】:

  • 您链接的问题是针对扩展程序自己的页面,例如弹出窗口或选项页面。对于内容脚本,您不需要加载单独的文件。只需在内容脚本中附加监听器即可。
  • 我试过了,但是没有用。我已将代码添加到问题中。
  • 可能 id 与页面上的某些内容冲突。也许有别的东西在干扰。也许您没有重新加载选项卡,因此不会注入内容脚本。只需在内容脚本的 devtools 中设置断点,然后查看会发生什么,变量和元素的值是什么等等。
  • 啊。成功。只是直接打电话给addEventListener。谢谢你帮助我。
  • 是的,默认情况下,内容脚本是在 DOMContentLoaded 之后加载的。

标签: javascript google-chrome-extension onclick


【解决方案1】:

使用setInterval函数检查<button>元素是否存在,如果不存在则创建并附加<button>元素。

var myVar = setInterval(function() { 
    if(document.getElementById('aButton')) {
        //  clearInterval(myVar);
        return false;
    } else {
        if(document.getElementsByClassName("assignedToUsers")[0]) {
            var button = document.createElement("button");
            button.innerHTML = "Test";
            button.id = "aButton";
            button.type = "button";
            document.getElementsByClassName("assignedToUsers")[0].appendChild(button);

            var theButton = document.getElementById('aButton');
            theButton.addEventListener('click', function() {
                console.log(document.getElementsByClassName("ms-TextField-field")[0].value);
            });
        }
    }
}, 500);

【讨论】:

  • 请解释一下!
  • @SzabolcsPáll 使用设置间隔函数并检查按钮元素,因为按钮元素不存在而不是按钮追加,否则按钮不追加
猜你喜欢
  • 2019-03-23
  • 2010-12-13
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多