javascript - 如何比较当前事件选项卡的 URL

标签 javascript html css google-chrome google-chrome-extension

尝试为特定网站编写广告拦截器。

我已经有了删除首页广告的代码,但它仍然适用于,例如:电影页面。这会导致包含海报和所有内容的信息部分被删除。所以,我只希望这段特定的代码在主页上运行。可以是 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/

相关文章:

javascript - 未捕获的 TypeError : $(. ..).easyAutocomplete 不是函数

jquery - 如何获得第一个字符为 $ 的 div

html - 如何在另一个div的右上角创建三 Angular 形以看起来被边框分开

html - 如何创建一条从左到右穿过文本并带有过渡的线条?

css - 无序列表不在 DIV 中居中。

css - :local(. class) { } 在 CSS 模块中如何工作?

php - 使用 JS setTimeout 在循环中发布 AJAX 请求,但 setTimeout 被调用得太频繁了

javascript - 为什么 Node fs.writeFile() 方法成功,但随后向浏览器发送了一个空文件?

javascript - 将 "select"下拉列表转换为列表下拉列表后,div 显示/隐藏停止工作

html - 为什么 Prettier 代码格式化程序在 VS Code 中停止格式化?