我是关于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), 这种替换可能是坏事。但是当应用于特定页面时,它们很快......
谢谢你!答案 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
是非常快。