如何使用 Javascript“查找”由 Angular 组件提供的元素?

Posted

技术标签:

【中文标题】如何使用 Javascript“查找”由 Angular 组件提供的元素?【英文标题】:How to 'Find' elements served by Angular components using Javascript? 【发布时间】:2022-01-16 12:01:55 【问题描述】:

我正在尝试创建一个 Chrome 扩展程序以在页面中注入一个对话框。 该页面似乎是使用 Angular 开发的:

<body al-exchange al-window-click ng-controller="PageCtrl as PageCtrl" class="" ng-class="...

我的问题: 我试图在页面上找到一个按钮(唯一的按钮),但我使用的选择器似乎找不到它。

// jquery
function FindButton()
   $(function()
   var num = 0; 

   $(":button").each(function(btn)
     num = num + 1; 
   )
  alert('Jquery - There are ' + num + ' buttons in page');
 ); 


var filter = ...

chrome.webNavigation.onBeforeNavigate.addListener( 
  FindButton, filter );

如果我只显示一个警告对话框,上面的代码就可以工作,所以我知道它正在触发。

我注意到(使用 Chrome 开发工具)如果我使用 Inspect 工具,我可以看到按钮元素,但如果我使用“查看页面源”工具,则没有实际控件,只有 div和脚本标签。

我已经编辑了我的原始问题以包含按钮 html 我希望这会有所帮助。 :-) ==>

<div ng-if="some_method_here()" class="acceloCreateEditPageCardContainer__footer" ng-trasclude="footer">==$0
   <create-edit-page-card-footer class="flex">
    <!-->
    <!-->
        <button ng-disabled="some_text_here" ng-click="some_text_here" 
                class="fillbutton fillbutton--blue" ng-class="some_ngclass_here">Save</button>
   </create-edit-page-card-footer class="flex">
</div> 

我已经进一步编辑了这个问题

我现在更新了我的扩展程序中的代码。我现在使用 'DOMContentLoaded' 事件来搜索按钮。

警报触发,但仍然显示页面中有 0 个按钮。

//=======background.js====================
function AddListner()
  document.addEventListener('DOMContentLoaded', 
    $(function()
      var num = 0; 
  
      $(":button").each(function(btn)
        num = num + 1; 
    )
    alert('There are ' + num + ' buttons in page');
    )
  );


var filter =  ....

chrome.webNavigation.onBeforeNavigate.addListener( 
  AddListner,
  filter );

任何有助于了解正在发生的事情,都会很棒! :-)

【问题讨论】:

确保在应用加载后查找按钮(任何客户端框架都会出现这种情况)。除此之外,角度本身并没有什么特别之处。这是指定正确选择器的问题。如果您仍有问题,请发布相关按钮的 html,以便我们就选择器提供帮助。 谢谢,我已编辑问题以包含更多信息 @Neea,感谢您的输入,我终于弄清楚了如何选择按钮。创建一个答案,我会将其标记为正确。 【参考方案1】:

我真的是在黑暗中拍摄,结果非常简单:

答案是使用 document.querySelector 并搜索具有两个类的按钮元素:

document.querySelector("button.fillbutton.fillbutton--blue").addEventListener('click', function ()  ... some function here ... 

非常感谢您的回复 Neea,它给了我继续努力所需的信心。 :-)

【讨论】:

以上是关于如何使用 Javascript“查找”由 Angular 组件提供的元素?的主要内容,如果未能解决你的问题,请参考以下文章

Selenium c#如何通过JavaScript查找元素?

用于查找从点到多边形的最小距离的 Javascript 代码(由 html 区域定义)

10个可靠的JavaScript测试工具

如何在javascript中找到数组的所有组合

如何在javascript中使用表达式查找'/'字符

如何使用javascript查找两个日期之间的天数差异