尝试为特定网站编写广告拦截器。
我已经有了删除首页广告的代码,但它仍然适用于,例如:电影页面。这会导致包含海报和所有内容的信息部分被删除。所以,我只希望这段特定的代码在主页上运行。可以是 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,它似乎适用于每次页面加载,但它似乎代码仍在其他子域上运行。
我希望此代码仅在主页上运行。对于其他人,我将编写另一个自定义脚本,该脚本仅适用于电影子域。
我想我遗漏了一些重要的东西。
最佳答案
看起来你很接近。作为wOxxOm提到,您在 if
语句中的比较语法不完全正确。要正确格式化您的倍数或,请尝试:
if (changeInfo.url == "net.adjara.com" ||
changeInfo.url == "net.adjara.com/Home" ||
changeInfo.url == "net.adjara.com/Home/") {
// your code block
}
您可以将 ||
本身视为新语句的开始。我们必须明确说明我们比较的是哪两件事,以便每个 ||
之间的相等性。使用我上面写的内容,您要求您的 if
语句分别检查每个比较中的相等性。然后,如果其中一项或多项为真,您的代码块将执行。 (额外提示:如果您有一系列 或
语句,如果其中任何一个为真,则整个事情为真。逻辑!)
现在,如果您想变得更有趣,可以使用正则表达式来完成。在这里,您传入 changeInfo.url
字符串并检查提供的字符串是否以 net.adjara.com
开头。
if (changeInfo.url.match(/^net.adjara.com/) {
// your code block
}
/
标记集告诉 Javascript 你正在使用正则表达式,^
表示你想检查字符串的开头,然后你就有了你想要的字符串你想匹配。
当然,这可能并不像我写的那样完全适合您的情况。您的字符串可能以“http://”或“https://”或其他任何内容开头。您可以选择使用 a different regex或者你可以查找 the String.prototype.includes()
method .您比我更清楚传入的字符串是什么样子!
祝你好运!
关于javascript - 如何比较当前事件选项卡的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58199883/