【问题标题】:How to compare current active tab's URLs如何比较当前活动标签的 URL
【发布时间】:2019-10-02 22:47:18
【问题描述】:

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

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

我希望此代码仅在主页上运行。对于其他人,我将编写另一个自定义脚本,该脚本仅适用于电影子域。

我想我错过了一些重要的东西。

【问题讨论】:

  • || 不能这样工作。您需要根据每个值检查原始变量。 URL 也以 http:// 或 https:// 开头。
  • 好的,所以我需要保存第一个url并进行比较?如果我马上去电影页面呢?
  • 不是我的意思。示例:var url = changeInfo.url; if (!url) { return } if (url === 'https://net.adjara.com/' || url === 'https://net.adjara.com/Home') { ...... }
  • 不起作用:/
  • 当然你需要正确调整它。

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


【解决方案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 您正在使用正则表达式,^ 表示您要检查字符串的开头,然后您需要匹配的字符串。

当然,正如我所写的那样,这可能不适用于您的情况。您的字符串可能以“http://”或“https://”或其他任何内容开头。您可以选择使用a different regex,或者您可以查找the String.prototype.includes() method。你比我更清楚你传入的字符串是什么样子的!

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多