【问题标题】:How to send XHR request only to real domains?如何仅将 XHR 请求发送到真实域?
【发布时间】:2020-06-27 02:24:47
【问题描述】:

我发送 XMLHttpRequest 并且只想将其发送到真实域,这些域不为空,也不是 Chrome 的内部 chrome: 域。

直到现在我都失败了——我的XMLHttpRequest 在任何情况下都在发送——但如果是currentDomaon == 0currentProtocoll == "chrome:",它就会变成空的。

我做错了什么?我应该如何调整代码以实现目标?

var currentDomain = "";
var currentProtocol ="";
const processingTabId = {};

function run(tab) {
    if (processingTabId[tab.id]) return;
    processingTabId[tab.id] = true;

    let newUrl = new URL(tab.pendingUrl || tab.url)
    currentDomain = newUrl.hostname;
    currentProtocol = newUrl.protocol;

        var xhr = new XMLHttpRequest();
        var protocol = "https://";
        var middle = ".myservice/"
        var end = "/action/data/";

        xhr.open("GET", protocol + middle + currentDomain + end, true);

        xhr.responseType = 'document';

if (currentDomain !== null) && (currentProtocol !== "chrome:") {
xhr.send();
        }       
}

【问题讨论】:

  • 您为什么首先尝试向这些域中的任何一个发送请求?这将在什么情况下使用,您不控制请求的发送位置吗?
  • if (currentDomain && currentProtocol ==="https:")
  • @mplungjan currentDomain 可以是任何东西 - 它是没有协议的带有子域的域,currentProtocol 也可以是 http:
  • if (currentDomain) 将测试 null、undefined 和 empty 然后使用 if (currentDomain && currentProtoco.indexOf("http") ===0)
  • @mplungjan 那么它应该类似于if (currentDomain && currentProtocol === ("https:" || "http:")) - 对吗?

标签: javascript google-chrome-extension xmlhttprequest


【解决方案1】:

您可以使用正则表达式来确定字符串是否为以 HTTP/HTTPS 开头的有效 URL。

例如:

https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

请参阅 this Stack Overflow 帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    • 2011-10-28
    • 2020-05-14
    • 2016-04-21
    • 1970-01-01
    • 2013-04-01
    • 2013-08-03
    相关资源
    最近更新 更多