Chrome扩展程序无法选择DOM元素

丹白

我想编写一个Chrome扩展程序,以对单击页面上的特定元素做出反应(此类页面的示例:https : //www.mentimeter.com/s/ea1639a1b16e623b9c7b4bc884f86aae/cc3aaa4bae22)。

我真正感兴趣的特定元素是一个<rect>元素,但是为了简单起见,我提供了此演示,它演示了我可以让脚本对单击高级<div id="root">元素而不是对其子元素的反应做出反应<div class="application mm-ui">(请参见页面清单)。图片中的元素)。

Chrome开发者工具显示的页面元素

我将对在DOM中如何选择其他元素的任何线索表示感谢。<div class="application mm-ui">如果我元素输入Chrome开发工具中的javascript控制台而不是使用扩展名,则用于选择元素的jQuery代码可以正常工作。

除了manifest.json和content.js之外,扩展文件夹还包含jQuery 3.3.1的下载副本(名称:“ jquery.js”)。

(我想还有一种方法可以使页面从googleapis下载jQuery,但我还没有找到方法。一次只能做一件事。)

manifest.json

 {
  "manifest_version": 2, 
  "name": "Mentimeter demo",
  "version": "0.1.0",
  "description": "Mentimeter demo",
 "content_scripts": [{
      "js": ["jquery.js","content.js"],
    "matches": ["https://www.mentimeter.com/*"]
  }]
}

content.js

$(document).ready(function(){
//$("div#root").click(function(){//works
$("div.application").click(function(){//does not work
alert("click");
});
});

等待。还有更多。

令人费解的是,使用香草JS的简单版本可以<rect>毫无问题地选择元素:

manifest.json

{
  "manifest_version": 2,

  "name": "Vanilla JS selection demo",
  "version": "0.1.0",
  "description": "Vanilla JS selection demo",

  "content_scripts": [{
    "js": ["content.js"],
    "matches": ["https://www.mentimeter.com/*"]
  }]

content.js

document.addEventListener("click",function(event){
var target = event.target;
if(target.tagName.toLowerCase() == "rect"){
alert("rect clicked");
} 
},false);
优雅用户

如评论中所述:

使用@wOxxOm建议使用jQuery事件委托的内容。

$(document).on('click', 'rect', function() { ...... }) 

如果您不想使用事件委托,也可以使用此易于使用的mutationObserver库github.com/uzairfarooq/arrive

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章