【发布时间】:2017-08-28 04:56:27
【问题描述】:
所以我正在为自己和几个朋友编写个人用户脚本。用户脚本用于阻止页面上的关键字。
在我使用的页面上搜索关键字:
var filter = ["worda", "wordb", "wordc"];
var found = false;
var check =
function () {
//Stores the content of the head and body in the document.
var head = $("head").html();
var body = $("body").html();
$.each(filter, function(index, item) {
if ((head + body).toString().toLowerCase().contains(item.toLowerCase())) {
window.clearInterval(interval);
console.log("Found: " + item);
found = true;
return false;
}
});
if (found) {
$("body").hide();
var originalTitle = $(document).prop("title");
$(document).prop("title", "Blocked");
window.setTimeout(function() {
if (confirm("This page contains a blocked keyword, are you sure you'd like to continue?")) {
$(document).prop("title", originalTitle);
$("body").show();
return;
}
}, 1);
}
};
然后我将它设置为每秒重复一次:
var interval = window.setInterval(check, 1000);
我每秒重新检查页面的原因是因为新内容可能是通过 Javascript 动态创建的,我需要确保它也被过滤。
但是,我想知道这是否是扫描页面以查找关键字的最有效方法,或者是否有更有效的方法不需要我重新检查整个页面(可能只需要重新检查新元素)。
我还想尽可能地降低间隔(我想大约 100 毫秒),但是我不知道这是否会非常节省资源。
感谢您的帮助。
【问题讨论】:
-
而不是检查间隔。当有任何变化时尝试检查它。这样会更有效率。
-
正是@mzeus.bolt 的建议是正确的。检查一些合适的事件,如 keyup 或 blur 以检查输入字段的值是否包含受限制的单词。
-
尝试检查它什么时候提交(因为你的代码中有
are you sure you'd like to continue?,所以我认为它有东西要提交?) -
问题在于这是一个在所有页面上运行的扩展,并且需要扫描所有创建的新元素(不仅仅是输入,因此使用诸如 keyup 之类的事件将无法正常工作)。不知道如何在没有间隔的情况下实现这一目标。
-
@AlivetoDie 当检测到被阻止的关键字时会显示该对话框,并询问用户是否确定要继续访问该网站。与提交数据无关。
标签: javascript jquery html optimization memory-efficient