greasemonkey help(替换html标签)

时间:2016-11-05 08:38:30

标签: html greasemonkey

我是关于greasemonkey的新手,并希望学会用它来删除javascript执行者。喜欢这个

<span class="lazyload" style="display:block; width:100%;height:100%;" data-imgSrc="//img4.leboncoin.fr/ad-thumb/whatsoever.jpg" data-imgAlt="nevermind"></span>

应该阅读

<img style="width:100%; height:100%;" src="http://img4.leboncoin.fr/ad-thumb/whatsoever.jpg" data-imgAlt="nevermind">

原则上,这可以通过一些搜索和替换来完成。在sed-speak

's|span class="lazyload" style="display:block;|img style="|gi'
's|data-imgSrc="//|src="http://|gi'

完成这项工作。

正如指出的那样,(例如RegEx match open tags except XHTML self-contained tags), 这种替换可能是坏事。但是当应用于特定页面时,它们很快......

谢谢你!

1 个答案:

答案 0 :(得分:1)

在处理实时网页时忘记正则表达式,因为直接替换HTML会破坏通过addEventListener或.on属性在js代码中附加的事件侦听器(单击处理程序等)。

以下是我正在使用的代码的摘录。

delazify();

// also delazify new dynamically added content
new MutationObserver(delazify).observe(document, {subtree: true, childList: true});

function delazify() {
    var lazies = document.getElementsByClassName('lazyload');
    for (var i = lazies.length; --i >= 0; ) {
        var el = lazies[i];
        var src = el.getAttribute('data-imgSrc');
        if (src) {
            el.src = src;
            el.removeAttribute('data-imgSrc');
            el.classList.remove('lazyload');
        }
    }
}

这很简单,唯一值得注意的事情是在MutationObserver回调而不是循环突变记录和添加节点,这在很多节点的情况下可能很慢,我直接按类名迭代,因为getElementsByClassName是非常快。