如何获取<head>远程网站的内容(我无权修改该网站)

问题描述 投票:0回答:1

比方说,我想获取 youtube 或其他远程网站的 标签。目前,我收到一条错误消息:

从来源“我的网站”访问“WebSite I request to get the head section”的 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。

我曾尝试执行 XMLHttpRequest,但我被来源阻止了。在这种情况下,我不是要注入或修改某些东西,而是要获取头部部分,您可以通过从源代码中复制粘贴轻松获得头部部分(因此我看不到那里的安全问题)。

这是我用来实现这一目标的功能:

function httpGet(theUrl) {
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            console.log(xmlhttp.responseText);
            return xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", theUrl, false);
    xmlhttp.send();
}

有没有办法向远程站点发送请求并获取头部内容(只读)?目前,这里有类似的问题,但没有一个能回答,因为不同的开发人员可以做不同的事情,我很难理解这是否可能。

更新:这里是 manifest.json 文件,但是,我想再次提及用户没有在选项卡或其他任何地方打开该域。这只是一个随机域。

{
  "manifest_version": 3,
  "version": "0.0.5",
  "action": {
    "default_popup": "popup/popup.html"
  },
  "permissions": ["activeTab", "scripting"],
  "host_permissions": ["<all_urls>"]
}
javascript jquery google-chrome-extension xmlhttprequest cross-domain
1个回答
0
投票

我测试了你的扩展,它工作正常。 manifest.json 略有修改但基本相同。

清单.json

{
  "name": "hoge",
  "manifest_version": 3,
  "version": "0.0.5",
  "action": {
    "default_popup": "popup.html"
  },
  "host_permissions": [
    "<all_urls>"
  ]
}

popup.html

<html>
<body>
  <script src="popup.js"></script>
</body>
</html>

popup.js

function httpGet(theUrl) {
  if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp = new XMLHttpRequest();
  }
  else {// code for IE6, IE5
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange = function () {
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
          console.log(xmlhttp.responseText);
          return xmlhttp.responseText;
      }
  }
  xmlhttp.open("GET", theUrl, false);
  xmlhttp.send();
}

const url = "https://stackoverflow.com/";
const ret = httpGet(url);
console.log(ret);
© www.soinside.com 2019 - 2024. All rights reserved.