尝试为特定网站编码广告拦截器。
我已经有删除主页上广告的代码,但是仍然可以在例如电影页面上使用。这将导致删除带有海报和所有内容的信息部分。因此,我只希望这段特定代码在Homepage上运行。可以是https://net.adjara.com/或https://net.adjara.com/Home。该网站是一个AJAX网站,仅加载一次即可。
这是删除主页上广告的代码:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.message === 'Homepage') {
var timer = setInterval(deletor, 1);
function deletor() {
timer;
var slider = document.querySelector("#slider-con");
var bannerTop = document.querySelector("#MainContent > div:nth-child(2)")
var bannerMiddle = document.querySelector("#MainContent > iframe");
var bannerRandom = document.querySelector("#MainContent > div:nth-child(3)");
if (slider) {
slider.parentNode.removeChild(slider);
}
if (bannerTop) {
bannerTop.parentNode.removeChild(bannerTop);
}
if (bannerMiddle) {
bannerMiddle.parentNode.removeChild(bannerMiddle);
}
if (bannerRandom) {
bannerRandom.parentNode.removeChild(bannerRandom);
}
};
} else {
return false;
}
})
这是发送消息的bg脚本:
chrome.tabs.onUpdated.addListener(function
(tabId, changeInfo, tab) {
// read changeInfo data and do something with it (like read the url)
if (changeInfo.url == "net.adjara.com" || "net.adjara.com/Home" || "net.adjara.com/Home/") {
chrome.tabs.sendMessage( tabId, {
message: "Homepage",
url: changeInfo.url
})
console.log("successful!");
} else if (changeInfo.url == "net.adjara.com/Movie/main*" || "net.adjara.come/Movie/*"){
console.log("Movie page");
} else {
return false;
}
}
);
我添加了一个console.log,它似乎可以在每次页面加载时正常工作,但是似乎代码仍在其他子域上运行。
我希望此代码仅在首页上运行。对于其他人,我将编写另一个自定义脚本,该脚本仅适用于电影子域。
我认为我缺少重要的东西。
答案 0 :(得分:1)
您似乎已经接近。如wOxxOm所述,您在if
语句中进行的比较语法不正确。要正确设置倍数格式或格式,请尝试:
if (changeInfo.url == "net.adjara.com" ||
changeInfo.url == "net.adjara.com/Home" ||
changeInfo.url == "net.adjara.com/Home/") {
// your code block
}
您可以将||
本身视为新语句的开始。我们必须明确地说出每个||
之间的相等性我们正在比较哪两个方面。使用上面我写的内容,您要让if
语句分别在每个比较中检查是否相等。然后,如果其中一项或多项是正确的,则将执行您的代码块。 (要点提示:如果您有一系列or
语句,如果其中任何一个是正确的,那么整个事情都是正确的。逻辑!)
现在,如果您想花哨的话,可以使用正则表达式来完成。在这里,您传入changeInfo.url
字符串,并检查提供的字符串是否以net.adjara.com
开头。
if (changeInfo.url.match(/^net.adjara.com/) {
// your code block
}
这组/
标记告诉Javascript您正在使用正则表达式,^
表示您要检查字符串的开头,然后拥有要匹配的所需字符串。 / p>
当然,正如我所写的那样,这可能无法完全适合您的情况。您的字符串可以以“ http://”或“ https://”或其他任何字符开头。您可以选择使用a different regex,也可以查找the String.prototype.includes()
method。您知道传入的字符串看起来比我更好!
祝你好运!