相关疑难解决方法(0)

是否有JavaScript/jQuery DOM更改侦听器?

基本上我想在DIV的内容发生变化时执行脚本.由于脚本是独立的(chrome扩展和网页脚本中的内容脚本),我需要一种方法来简单地观察DOM状态的变化.我可以设置投票,但这似乎很草率.

javascript jquery google-chrome-extension

382
推荐指数
5
解决办法
26万
查看次数

MutationObserver的性能,用于检测整个DOM中的节点

我有兴趣使用MutationObserver检测是否在HTML页面中的任何位置添加了某个HTML元素.例如,我会说我想检测是否<li>在DOM中的任何地方添加了任何内容.

MutationObserver到目前为止,我看到的所有示例只检测节点是否添加到特定容器中.例如:

一些HTML

<body>

  ...

  <ul id='my-list'></ul>

  ...

</body>
Run Code Online (Sandbox Code Playgroud)

MutationObserver 定义

var container = document.querySelector('ul#my-list');

var observer = new MutationObserver(function(mutations){
  // Do something here
});

observer.observe(container, {
  childList: true,
  attributes: true,
  characterData: true,
  subtree: true,
  attributeOldValue: true,
  characterDataOldValue: true
});
Run Code Online (Sandbox Code Playgroud)

所以在这个例子中,MutationObserver设置为观察一个非常确定的容器(ul#my-list)以查看是否有任何<li>附加到它的容器.

这是一个问题,如果我想不那么具体,并注意<li>整个HTML身体,如下所示:

var container = document.querySelector('body');
Run Code Online (Sandbox Code Playgroud)

我知道它适用于我为自己设置的基本示例......但是不建议这样做吗?这会导致性能不佳吗?如果是这样,我将如何检测和衡量性能问题?

我想也许有一个原因,所有的MutationObserver例子都是如此具体的目标容器......但我不确定.

html javascript html5 mutation-observers

58
推荐指数
1
解决办法
2万
查看次数

Tampermonkey脚本在页面加载之前运行

我需要隐藏html页面中的一个部分:

<h1 data-ng-show="!menuPinned &amp;&amp; !isSaaS" class="logo floatLeft" aria-hidden="false"><span>XXX&nbsp;</span><span style="font-weight: bold;">XXX&nbsp;</span><span>XXXXX</span></h1>
Run Code Online (Sandbox Code Playgroud)

以下代码在Chrome dev中正常运行.工具

var ibmlogo = document.querySelectorAll('h1.logo.floatLeft');
ibmlogo[1].remove();
Run Code Online (Sandbox Code Playgroud)

但是当我在脚本处于活动状态时加载页面时,部分(h1)将不会消失.我相信这是因为当脚本运行时,DOM尚未完成加载,因此脚本无法找到选择器.

我尝试了很多不同的东西(例如window.onLoad),但我的脚本仍然无效.最后一次尝试(失败)如下:

var logo = document.querySelectorAll('h1.logo.floatLeft');
logo.onload = function() {removeLogo()};

function removeLogo(){
    console.log("### logo array lenght: " + logo.length);
    logo[1].remove();
};
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢Giovanni

html javascript tampermonkey

9
推荐指数
1
解决办法
9912
查看次数

如何在无限滚动页面上重复运行 Chrome 扩展程序代码

这是我的第一个 Chrome 扩展程序。我正在构建一个扩展来替换页面上的文本。

提供的代码适用于加载 DOMContent 加载的任何内容。但是,在使用某种无限滚动的页面上,加载新内​​容时不会发生文本替换。

我需要它来对稍后添加到页面的任何内容运行文本替换。

我曾尝试使用 onscroll 事件侦听器,但这既笨拙又昂贵。我相信有更好的方法。

我已经研究过使用清单 run_at,但还没有找到使用它的方法。

let elements = document.getElementsByTagName('*');
let replacements = {
    "first to replace": "new text",
    "second to replace": "also new text"
};
let keys = Object.keys(replacements);

 RegExp.quote = (str) => {
     return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
 };

let makeItAwesomer = () => {
    for (var i = 0; i < elements.length; i++) {
        var element = elements[i];

        for (var j = 0; j < element.childNodes.length; j++) {
            let node = element.childNodes[j];

            if …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension dom-events infinite-scroll

3
推荐指数
1
解决办法
635
查看次数

如何在加载网页之前运行内容脚本?

我想更改一些 dom 内容,以便所有输入字段值都是""网页的,然后用户才能看到它。我该怎么做?有什么办法可以做到这一点吗?谢谢。

google-chrome-extension google-chrome-devtools

2
推荐指数
1
解决办法
3494
查看次数